Puppeteer Chromium 动态 JS 内容

puppeteer chromium dynamic js content

提问人:Thomas J. 提问时间:7/26/2023 更新时间:7/31/2023 访问量:63

问:

试图通过 lambda 抓取网站。它加载精细,加载铬和木偶师。

但是,每当应该通过第三方 JS 脚本加载其他内容时。例如,插件将广告呈现给由输入类型触发的 Web 内容中的广告。假设行为是——example.js<div class="advertisments"></div>

  • 用户在输入中键入 2 个字母“re”。
  • example.js将某些广告加载到 div。.advertisments

出于某种原因,我的铬要么不允许这样的事情,要么只是忽略它。 我的工作流程是

const page = await pupBrowser.newPage()
page.goto('example.com', { waitUntil: 'networkidle2'})
const input = await page.$('.someInput')
await input.type('re')
await delay(2000ms)
await page.waitForElement('.advertisments')

出于某种原因,我的广告在 lambda puppeteer chromium 上是空的,在本地 chrome 上是空的。

我的论点是:

[
  '--allow-running-insecure-content',
  '--autoplay-policy=user-gesture-required',
  '--disable-background-timer-throttling',
  '--disable-component-update',
  '--disable-domain-reliability',
  '--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process',
  '--disable-ipc-flooding-protection',
  '--disable-print-preview',
  '--disable-dev-shm-usage',
  '--disable-setuid-sandbox',
  '--disable-site-isolation-trials',
  '--disable-speech-api',
  '--disable-web-security',
  '--disk-cache-size=33554432',
  '--enable-features=SharedArrayBuffer',
  '--hide-scrollbars',
  '--ignore-gpu-blocklist',
  '--in-process-gpu',
  '--mute-audio',
  '--no-default-browser-check',
  '--no-first-run',
  '--no-pings',
  '--no-sandbox',
  '--no-zygote',
  '--use-gl=angle',
  '--use-angle=swiftshader',
  '--window-size=1920,1080',
  '--start-maximized'
]
节点 .js aws-lambda chromium aws-lambda-傀儡师

评论

0赞 Ivan Balepin 7/28/2023
我认为这还不足以回答。您至少可以分享一下外观的最终结果吗?广告加载完成后。(理想情况下,当然是共享实际页面,但至少是这样)我假设广告加载前的存根是存根吗?基本上,之前和之后是什么样子的?<div class="advertisments"></div><div class="advertisments"></div>
1赞 pguardiario 7/30/2023
这可能很正常。换句话说,他们可能不想向 AWS 数据中心流量展示广告
0赞 Thomas J. 7/31/2023
这些广告只是简单的例子。幼崽的工作是分析“正确的广告”是否处于低谷。但发现,它决定来自 Lamba 的请求是一个机器人。

答:

0赞 Thomas J. 7/31/2023 #1

似乎正如评论者所建议的那样,我发现了类似的推理。

通过本地 PC 运行,它的行为与在 lambda 上运行不同。正如我进一步发现的那样,简单地说,网站确实会阻止来自机器人的流量(将 lambda IP 视为这样)。

简单地说,如果其他人遇到类似的麻烦 - 使用puppeteer stealth插件,否则分析网站。

由于我使用的网站 - 托管在 shopify 上,似乎没有简单的四处走动。