【发布时间】:2020-03-28 19:35:44
【问题描述】:
有什么问题
我尝试使用 Puppeteer 单击某个元素,并在此任务上尝试了 page.click 和 page.evaluate。
- 如果在
headless=false模式下,两种方法都可以正常工作。 - 如果在
headless=true模式下,page.evaluate有效,但page.click永远挂起。
我当时所做的是,page.waitForSelector 显式用于page.click 之前的元素,请参见下面的代码。
看起来waitForSelector 也永远挂起。
谁能帮我理解为什么它在无头模式下挂起?
环境
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();
})();
【问题讨论】:
-
你试过在无头模式下截图吗?
-
@Capripot,很好的建议,现在让我试试,一会就回来。
-
@Capripot,我尝试设置较大的视口大小,现在
page.click工作了,非常感谢 :-)