В чем проблема
Я пытаюсь щелкнуть по некоторому элементу с помощью Puppeteer, и я попытался page.click
и page.evaluate
в этом задании.
- Если в
headless=false
В режиме оба подхода работают хорошо. - Если в режиме
headless=true
, page.evaluate
работает, но page.click
зависает навсегда .
Что я сделал тогда page.waitForSelector
явно для элемента до page.click
, см. код ниже.
И, похоже, waitForSelector
тоже навсегда зависает.
Может ли кто-нибудь помочь мне понять, почему он зависает в режиме без головы?
Env
chrome version is HeadlessChrome/80.0.3987.0
puppeteer version 2.1
macOS catalina 10.15.3
Код
const pptr = require('puppeteer');
console.log(pptr.version);
(async () => {
var br = await pptr.launch({
headless: true,
defaultViewport: null,
args: [
'--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
'--user-data-dir=/tmp/user_data/',
],
});
var page = await br.newPage();
var url = 'https://www.lookfantastic.com/brands/aesop/view-all.list';
var css = 'div.responsiveProductListPage_topPagination button[aria-label="next page" i]:not([disabled])';
const chrome_version = await page.browser().version();
console.log(`chrome version is ${chrome_version}`);
await page.goto(url);
await page.waitForSelector(css, { visible: true }); // when headless=true, hangs here.
await Promise.all([
page.click(css),
//page.evaluate((css) => { document.querySelector(css).click(); }, css),
page.waitForNavigation({waitUntil: 'networkidle0'}),
]);
console.log('success');
await new Promise(r => setTimeout(r, 1000));
await br.close();
})();