Возврат результатов Puppeteer из 2 разных записей в 1 отдельный файл CSV - Как это сделать? - PullRequest
0 голосов
/ 21 февраля 2019

Я использую 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);
    }
})();
...