Я использую Puppeteer для поиска отзывов на этой странице https://www.qoo10.sg/item/FANCO-FANCO-CEILING-FAN-FFM2000-FFM3000-FFM4000-FFM6000-LIGHT-KITS/496619203?banner_no=1305330
И если вы посмотрите на раздел обзора, он разделится на 2 отдельных отзыва
Фотообзоры и нормальныеОбзоры
Что я сделал, так это пробежался по нумерации страниц для Обзоров фотографий и после этого пробежался по нумерации страниц для обычных проверок
Однако после этого у меня возникают проблемы с передачей данных в CSVфайл.
Как я могу это сделать?
const puppeteer = require('puppeteer');
const CREDS = require('./creds');
const fs = require('fs');
(async function main() {
try{
//URL to start login
const URL = 'https://www.qoo10.sg/gmkt.inc/Login/Login.aspx';
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
//User Agent for Chrome Windows
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36')
await page.goto(URL ,{waitUntil:'networkidle0'});
const USERNAME_SELECTOR = '#login_id';
const PASSWORD_SELECTOR = '#passwd';
const BUTTON_SELECTOR = '#dv_member_login > fieldset > a';
await page.click(USERNAME_SELECTOR);
await page.keyboard.type(CREDS.username);
await page.click(PASSWORD_SELECTOR);
await page.keyboard.type(CREDS.password);
await page.click(BUTTON_SELECTOR);
await page.waitForNavigation({waitUntil:'networkidle0'});
const itemUrl = 'https://www.qoo10.sg/item/FANCO-FANCO-CEILING-FAN-FFM2000-FFM3000-FFM4000-FFM6000-LIGHT-KITS/496619203?banner_no=1305330';
await page.goto(itemUrl, {waitUntil:'networkidle0'});
//To Loop across Photoreview pages
//We take the number of photo reviews and divde by 5 as that is the number of reviews per page
//Then we round this number up to get the number of pages
//So if there are 37 reviews when we take 37/5 = 5.4 and we round it up, we will end up with 6 pages
//In this case, i = 6 so it will loop 5 times for i < 6
const photoreviewsnumber = await page.evaluate(() => document.querySelector('#divPremiumList > div.rv_tit.photo > h2 > span').innerText);
const photoreviewspage = Math.ceil(photoreviewsnumber/5);
const normalreviewsnumber = await page.evaluate(() => document.querySelector('#total_feedback_cnt').innerText);
const normalreviewspage = Math.ceil(normalreviewsnumber/10);
const allOptions = [];
const allOptions2 = [];
for (let i = 0; i < photoreviewspage; i++) {
const button = await page.$('#photo_review_paging > a.next');
button.click();
const options = await page.evaluate(() =>
Array.from(document.querySelectorAll('p.dtl')).map(partner => partner.innerText)
);
await page.waitFor(500);
await allOptions.push(options);
};
for (let r = 0; r < normalreviewspage; r++) {
const button = await page.$('#feedback_paging > a.next');
button.click();
const options2 = await page.evaluate(() =>
Array.from(document.querySelectorAll('.feedback p')).map(partner2 => partner2.innerText)
);
await page.waitFor(500);
await allOptions2.push(options2);
};
console.log(alloptions);
console.log(alloptions2);
browser.close();
} catch(e) {
console.log('our error', e);
}
})();