当我在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时,该元素不会出现:
答案 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 });