Ошибка: контекст выполнения был разрушен, скорее всего, из-за навигации - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь почистить некоторые сайты. Навигация выглядит следующим образом:

  1. Откройте начальную страницу.
  2. Нажмите на каждый URL один за другим, зарегистрируйте соответствующую информацию.
  3. Перейдите на следующую страницу, повторитешаг 2.
  4. Закройте браузер, когда больше нет следующей кнопки.

Проблема заключается в том, что после того, как я нажимаю на первый URL из списков и регистрирую некоторую информацию, оностанавливает его выполнение, выдавая ошибку Error: Execution context was destroyed, most likely because of a navigation.

Можно ли сохранить глубокий клон предыдущей страницы и каким-то образом использовать его, чтобы нажать на следующий URL? Или есть какой-то другой способ, которым я могу достичь этой навигации?

Вот мой код:

index.js

const hatla2ee = require('./hatla2ee');

(async () => {
await hatla2ee.initialize();

let results = await hatla2ee.getListings();
debugger;   
})(); 

hatla2ee.js

const puppeteer = require("puppeteer");
const chalk = require("chalk");
var fs = require("fs");

const error = chalk.bold.red;
const success = chalk.keyword("green");

const start_url = "https://eg.hatla2ee.com/en/car"

const self = {
  browser: null,
  page: null,

  initialize: async () => {
    self.browser = await puppeteer.launch({ headless: false });
    self.page = await self.browser.newPage();
    self.pageNew = await self.browser.newPage();
    await self.page.setViewport({ width: 1440, height: 768 });

    await self.page.goto(start_url, { waitUntil: 'networkidle0' });
   },

 getListings: async () => {
    let results = [];

    do {
            let new_results = await self.getUrls();

            results = [results, ...new_results]
            console.log(results);
            let nextButton = await self.page.$x(`//div[@class='pagination pagination-right']/ul/li`);
            let nextPage = await nextButton[nextButton.length-1];
            let buttonText = (await(await nextPage.getProperty(`innerText`)).jsonValue());
            console.log(success(buttonText))
            if (buttonText.includes(`Next`)){
                await nextPage.click();
                await self.page.waitForNavigation({ waitUntil: 'networkidle0' });
            }else{
                break;
            }
        }while (true);

        return results;
},

getUrls: async () => {
    let urls = await self.page.$x(`//a[@class='NewListTitle']`);

    let results = [];

    for (let url of urls) {
        url.click()
        await self.page.waitForNavigation({ waitUntil: 'networkidle0' });
        /*let href = await (await url.getProperty(`href`)).jsonValue()
        results.push(href)
        console.log(href)
        await self.page.goto(href, { waitUntil: 'networkidle0' });
        await self.page.waitForNavigation({ waitUntil: 'networkidle0' });
        */

    }

    return results;

  }
}

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