我有一个用puppeteer在nodejs里写的脚本,它在本地无头模式下运行得很好。然而,当我把它部署到aws ec2(ubuntu服务器)上时,它就停止工作了。试了几次之后,我退出了“page.content()”,发现有一个cloudflare保护显示。我该如何绕过它?为什么当我在本地运行脚本时,它没有检测到puppeteer?
wgx48brx1#
因为cloudflare阻止了数据中心的流量。我想你可以使用一个住宅代理。
vc6uscn92#
如果用户pguardiario是正确的,并且流量被cloudflare阻塞,则解决该问题的方法之一是绕过保护。为此,安装库数据,并使用下面的代码返回页面的ashml。库:
npm i puppeteer-extra puppeteer-extra-plugin-stealth puppeteer
节点j:
const puppeteer = require('puppeteer-extra') const pluginStealth = require('puppeteer-extra-plugin-stealth') const { executablePath } = require('puppeteer') const link = 'https://www.g2.com/' const getHtmlThoughCloudflare = async (url) => { puppeteer.use(pluginStealth()) const result = await puppeteer .launch({ headless: true }) .then(async (browser) => { const page = await browser.newPage() await page.goto(url) const html = await page.content() await browser.close() return html }) console.log(` HTML: ${result}`) return result // html } getHtmlThoughCloudflare(link)
2条答案
按热度按时间wgx48brx1#
因为cloudflare阻止了数据中心的流量。我想你可以使用一个住宅代理。
vc6uscn92#
如果用户pguardiario是正确的,并且流量被cloudflare阻塞,则解决该问题的方法之一是绕过保护。
为此,安装库数据,并使用下面的代码返回页面的ashml。
库:
节点j: