Каков источник моей ошибки «Контекст выполнения уничтожен»? - PullRequest
0 голосов
/ 04 мая 2019

Я создаю программу для очистки ответов форума для онлайн Uni, на котором я работаю. Мне удалось успешно перейти на соответствующие страницы, но когда я попытался включить очистку для списка имен учеников, которые ответили, я получаю «Ошибка выполнения контекста была уничтожена».

До сих пор я пытался перемещаться по методам page.waitFor () с различным количеством тайм-аутов.

   const nameLinkList = await page.$$eval(
            '.coursename',
            (courseLinks => courseLinks.map(link => {
                const a = link.querySelector('.coursename > a');
                return {
                    name: a.innerText,
                    link: a.href
                };
            }))
        );

        for (const {
                name,
                link
            } of nameLinkList) {
            await Promise.all([
                page.waitForNavigation(),
                page.goto(link),
                page.waitFor(2000),
            ]);

            let [button] = await page.$x("//a[contains(., 'Self')]");
            if (button) {
                await button.click();
            } else {
                console.log(name);
                console.log('Didnt find link');
            }

            fs.appendFile('out.csv', name + '\n');
            await page.waitFor(1000);
            var elementExists = await page.$$('.author .media-body');

            if (elementExists) {
                await console.log(name);
                await page.waitFor(500);
                for (let z of elementExists) {
                    const studentName = await z.$eval('a', a => a.innerText);
                    await page.waitFor(2000)
                    await console.log(studentName);
                }
            }
            await page.goto('www.urlwiththelistofcourses.com');

        }

Я ожидал, что он будет перебирать каждую страницу, записывая сначала название курса, а затем имена всех студентов, которые разместили на курсах конкретный форум. Меня смущает то, что в отличие от предыдущих ошибок, которые застряли на определенной итерации, эта переменная, обычно в той же области, вокруг 12-17-й итерации, иногда даже раньше.

1 Ответ

0 голосов
/ 06 мая 2019

Кажется, что комбинация настройки waitFor здесь:

 fs.appendFile('out.csv', name + '\n');
            await page.waitFor(1000);
            var elementExists = await page.$$('.author .media-body');

до 2000, в сочетании с отключением рендеринга CSS и изображений решил проблему. Программа должна иметь ссылку перед входом в цикл, если страница загружалась слишком медленно.

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