Skip to content

Commit 2771d48

Browse files
author
FeckNeck
committed
fix: resolve issue with sub link scrapping
1 parent 54da7bd commit 2771d48

File tree

2 files changed

+38
-24
lines changed

2 files changed

+38
-24
lines changed

packages/scraper/src/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { writeFile } from 'fs/promises';
1+
import { writeFile, mkdir } from 'fs/promises';
22
import { Worker } from 'worker_threads';
33
import { weapons } from './weapons.js';
44
import type { Skin } from '@mhgu-wtt/shared';
55

6-
const MAX_WORKERS = 12;
6+
const MAX_WORKERS = 4;
77
let activeWorkers = 0;
88

99
function startWorker(
@@ -58,6 +58,6 @@ async function processWeapons() {
5858
}
5959

6060
await processWeapons();
61-
61+
await mkdir('./data', { recursive: true });
6262
await writeFile('./data/weapons.json', JSON.stringify(weapons, null, 2));
6363
console.log('✅ File saved successfully!');

packages/scraper/src/worker.ts

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,44 @@ await page.goto(`${KIRANICO_URL}/${weaponPrefix}`);
1111

1212
const skins: Skin[] = [];
1313

14-
const skinLinks = await page.locator('table').first().locator('a').all();
14+
const skinElements = await page.locator('td[rowspan]').all();
15+
1516
const skinUrls = await Promise.all(
16-
skinLinks.map((skinLink: Locator) => skinLink.getAttribute('href')),
17+
skinElements.map(async (td: Locator) => {
18+
try {
19+
const firstLink = td.locator('a').first();
20+
return await firstLink.getAttribute('href');
21+
} catch (error) {
22+
const innerText = await td.innerText();
23+
console.log(
24+
`Weapon ${weaponId} - Error getting skin URL for ${innerText}:`,
25+
error,
26+
);
27+
return null;
28+
}
29+
}),
1730
);
1831

19-
for (const skinUrl of skinUrls) {
20-
if (skinUrl) {
21-
const skinPage = await browser.newPage();
22-
await skinPage.goto(skinUrl);
23-
24-
const skinName = await skinPage.locator('rt').first().innerText();
25-
const skinId = await skinPage.evaluate(() => {
26-
const div = document.querySelector('div#model-viewer.center-block');
27-
if (div) {
28-
const bgImage = window.getComputedStyle(div).backgroundImage;
29-
return bgImage.replace(/\D/g, '');
30-
}
31-
return 'Not found';
32-
});
33-
34-
console.log(`Weapon ${weaponId} - Skin ${skinId}: ${skinName}`);
35-
skins.push({ id: skinId, name: skinName });
36-
await skinPage.close();
37-
}
32+
const filteredSkinUrls = skinUrls.filter((url) => url !== null);
33+
console.log(`Found ${filteredSkinUrls.length} skins for weapon ${weaponId}`);
34+
35+
for (const skinUrl of filteredSkinUrls) {
36+
const skinPage = await browser.newPage();
37+
await skinPage.goto(skinUrl);
38+
39+
const skinName = await skinPage.locator('rt').first().innerText();
40+
const skinId = await skinPage.evaluate(() => {
41+
const div = document.querySelector('div#model-viewer.center-block');
42+
if (div) {
43+
const bgImage = window.getComputedStyle(div).backgroundImage;
44+
return bgImage.replace(/\D/g, '');
45+
}
46+
return 'Not found';
47+
});
48+
49+
console.log(`Weapon ${weaponId} - Skin ${skinId}: ${skinName}`);
50+
skins.push({ id: skinId, name: skinName });
51+
await skinPage.close();
3852
}
3953

4054
await page.close();

0 commit comments

Comments
 (0)