为什么 Puppeteer page.click 不等待(也许是 Browserless?)

Why isn't Puppeteer page.click waiting (maybe Browserless?)

目标: 我有一个页面,我需要在第一次单击页面上的某些内容后从中获取 html。

问题: 返回的 html 不等待该元素单击。

这是我尝试过的一种方法。

await page.setViewport({width: 1400, height: 800});
await page.waitForSelector('.specs .accent', {visible: true, timeout: 80000});

const html = await page.evaluate(() => {
      const moreButton = document.querySelector('.specs .accent');
      moreButton.click();
      return document.body.innerHTML;
});

console.log(html);

这是我尝试过的另一种方法:

await page.setViewport({width: 1400, height: 800});
await page.waitForSelector('.specs .accent', {timeout: 80000});
await page.click('.specs .accent');
const html = await page.evaluate(() => document.body.innerHTML);
console.log(html);

返回的 html 是点击发生之前的 html。让我相信点击坏了,但没有出错。

备注:

最后: 我真的不确定如何进一步调试它。有什么线索吗?

参考页面:https://www.article.com/product/16190/mod-blue-berry-armchair

在使用您通过电子邮件发送给我的无浏览器支持的 URL 进行测试后,我能够通过实时调试器看到默认视口是“移动”,因此页面结构已更改...导航栏的汉堡包按钮和您尝试单击的按钮所在的规格部分已折叠。

我在导航到页面之前添加了这一行:

await page.setViewport({
      width: 1920,
      height: 1080
  })

这使视口在水平方向上变大了,之后,我转到控制台并 运行 一个 document.querySelector('.specs .accent').click() 然后我可以单击并根据需要展开信息。

解决方案是某些 javascript 请求被阻止可能会中断 Puppeteer 单击元素的能力。如果您遇到问题,请确保没有请求被 Browerless、Puppeteer 或您的代理阻止,然后再次尝试 page.click。

一个简单的调试解决方案是使用 page.screenshot 查看是否确实点击了某些内容。