木偶-元素未出现在屏幕上

时间:2019-10-03 06:25:28

标签: node.js puppeteer

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

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

这是我用来测试的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

1 个答案:

答案 0 :(得分:0)

问题:地区

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

此外,突出显示的元素(最有可能)仅在您与目标国家/地区来自同一国家时才可见。当我从美国过滤并从美国IP访问时,这显示了这一点。

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

因此,Google Flights中应用了一些隐藏的规则,遗憾的是,直到有人发现一些漏洞利用之后,您现在无法对此进行任何操作。

问题:waitUntil: 'load'

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

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

使用waitUntil: 'networkidle0'waitUntil: 'networkidle2'确保大多数请求已完成。进一步了解on the docs

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