【问题标题】:Puppeteer - Element doesn't appear on the screenPuppeteer - 元素没有出现在屏幕上
【发布时间】:2020-02-01 10:24:52
【问题描述】:

当我在 NodeJS 中启动 Puppeteer 以拍摄 Google 航班页面的照片时,没有出现一个元素(当使用 Puppeteer 启动浏览器时)但是当我使用相同的 URL/链接并像往常一样使用任何其他元素打开它时浏览器(没有 Puppeteer)我可以看到那个元素。

我有点理解 Google 航班可能会在客户端呈现 HTML,而不是 SSR。但奇怪的是为什么我不能只看到这个元素。

这是我用来测试的 URL:Click

我的代码:

const screenShot = (url) => {

  return new Promise( async (resolve) => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto(url, { waitUntil: 'load', timeout: 0 });
    await page.screenshot({ path: "screenshot.png" });

    browser.close();
    resolve("Done");

  });
}

这是我使用 Puppeteer 运行 Chrome/Chromium 时没有出现的元素:

http://prntscr.com/pe6agz

【问题讨论】:

    标签: node.js puppeteer


    【解决方案1】:

    问题:地区

    您需要先选择一个国家/地区。可能是因为地域差异。确保您使用的是来自正​​确国家/地区的程序。

    此外,您突出显示的元素(很可能)仅在您从与目标相同的国家/地区访问时可见。这表明当我从美国过滤并从美国 IP 访问时。

    但是,当我从另一个国家访问时,这表明,

    所以谷歌航班应用了一些隐藏的规则,遗憾的是你现在不能做任何事情,直到有人发现一些漏洞。

    问题:waitUntil: 'load'

    您不是在等待页面完成加载。

    waitUntil: 'load' 不会等到所有元素都加载到页面上。它将在 HTML 加载时解析。所以你需要等待请求完成。

    使用waitUntil: 'networkidle0'waitUntil: 'networkidle2' 确保大部分请求都已完成。阅读有关on the docs 的更多信息。

    await page.goto(url, { waitUntil: 'networkidle0', timeout: 0 });
    

    【讨论】:

    • 你是否成功地在 NodeJS 中完成了这项工作?我选择了语言英语,国家美国并试图找到从洛杉矶到纽约的航班,当我在headless: false 模式下使用 puppeteer 和 Chromium 运行它时看不到元素?
    • 这很可能是谷歌适用于特定航线和国家的飞行条件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多