Страница кукловода не хочет загружаться полностью в режиме без головы - PullRequest
1 голос
/ 27 января 2020

Вот мой код:

// Open the browser
let browser = await puppeteer.launch({
    args: ["--no-sandbox"]
});
let page = await browser.newPage();

navPromise = page.waitForSelector('#js_boite_reception').then(() => {
    console.log('received');
});
await page.goto(entMessagesURL);
await navPromise;

// Wait 10 seconds, to be sure that is not because my connection is slow (it's not)
logger.log(`On the messages page (session=${username})`);
await delay(10000);

// Write an html file with the page content
let pageContent = await page.content();
require('fs').writeFileSync('./test.html', pageContent);

received не отображается, и я получаю сообщение об ошибке тайм-аута. Но если я уберу функцию waitForSelector и напишу только файл test.html, мы увидим, что:

Включен режим без головы, часть страницы не загружена

headless mode en

Безголовый режим отключен, все страницы загружены

Headless mode dis

При безголовом режиме только часть содержимого страницы загружено. Я не знаю почему. Даже если я добавлю тайм-аут в одну минуту, он не загрузит больше ... Что я могу сделать?

Примечание. Я пытался использовать useragent:

await page.setUserAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36");

(под let page = await browser.newPage())

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Вы можете попробовать с опцией waitUntil

await page.goto(entMessagesURL, {waitUntil: 'networkidle2'});
0 голосов
/ 05 февраля 2020

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

Попробуйте переместить эти строки:

await page.goto(entMessagesURL);
navPromise = page.waitForSelector('#js_boite_reception').then(() => {
    console.log('received');
});

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

...