кукловод только ломает около 200 страниц и не продолжает - PullRequest
0 голосов
/ 12 января 2020

по какой-то причине я не понимаю, что приложение моего узла перестает удалять после нескольких минут без каких-либо ошибок, а только записывает, например, это веб-сайт прокрутки бесконечности ... это код:

const fs = require('fs');

(async() => {
    // start the browser
    const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
    // open a new page
    const page = await browser.newPage();
    const pageURL = 'http://www.yad4.co.il/dogs//////////////#1';
    try {
        // try to go to URL
        await page.goto(pageURL);
        console.log(`opened the page: ${pageURL}`);
        await page.setViewport({
            width: 1200,
            height: 800
        });
        await autoScroll(page);
    } catch (error) {
        console.log(`failed to open the page: ${pageURL} with the error: ${error}`);
    }
  // Find all links to dogs
  const postsSelector = '.yd-search-page .container .row .col-md-9 .yd-gallery .search-handler-yd .col-xs-12 #dogs_more .col-md-4 .yd-dog-img .yd-mask a';
  await page.waitForSelector(postsSelector);
  const postUrls = await page.$$eval(postsSelector, postLinks => postLinks.map(link => link.href));

  // Visit each page one by one
  for (let postUrl of postUrls) {

      // open the page
      try {
          await page.goto(postUrl);
          console.log('opened the page: ', postUrl);
      } catch (error) {
          console.log(error);
          console.log('failed to open the page: ', postUrl);
      }
      // get the name of the dog
      const dogSelector = '.adopt.yd-amuta .container .yd-dog-cont .col-xs-12 .adopt-head .row .col-sm-6 .adopt-breadcrumb-title h2 span';
     // await page.waitForSelector(dogSelector);
      const dogName = await page.$eval(dogSelector, dogSelector => dogSelector.innerHTML);

        // Writing the news inside a json file
 fs.appendFile("dogtest4.json", JSON.stringify({dogName},), function(err) {
    if (err) throw err;
    console.log("Saved!");
  });

    }
    // all done, close the browser
    await browser.close();

    async function autoScroll(page){
        await page.evaluate(async () => {
            await new Promise((resolve, reject) => {
                var totalHeight = 0;
                var distance = 100;
                var timer = setInterval(() => {
                    var scrollHeight = document.body.scrollHeight;
                    window.scrollBy(0, distance);
                    totalHeight += distance;

                    if(totalHeight >= scrollHeight){
                        clearInterval(timer);
                        resolve();
                    }
                }, 100);
            });

        });
    }    
    process.exit()
})();

так что это дает мне информацию, но случайно, я имею в виду, иногда это дает мне 115 страниц, иногда 300 страниц, а иногда только 90 страниц, и я не понимаю, почему, пожалуйста, помогите мне.

Спасибо.

1 Ответ

0 голосов
/ 15 января 2020

Я не могу комментировать, но я полагаю, что это может быть связано с достижением лимита памяти, что замедляет процесс.

Вы можете попробовать добавить «await» перед fs.appendFile (. ..) как здесь объяснено , может работать на вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...