在云功能上使用 puppeteer 拒绝网站访问
Website access denied using puppeteer on cloud functions
我正在尝试使用木偶操作来逃避这个 url https://www.myntra.com/laptop-bag/chumbak/chumbak-unisex-brown-geo-bird--printed-laptop-bag/6795882/buy。
它在我使用 { headless: false }
时工作,但在无头模式下失败。
然后我用这个比较了两种情况下的反应。
const resp = await page.goto(url);
console.log(resp);
然后我发现我们在使用无头模式时需要添加userAgent。所以我添加了这个。
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
现在它在两种情况下都有效本地。但是当我部署到云功能时,它仍然失败。
这是使用 puppeteer 截取的屏幕截图。
这是响应日志的一部分。
_headers:
{ status: '403',
server: 'AkamaiGHost',
'mime-version': '1.0',
'content-type': 'text/html',
'content-length': '395',
expires: 'Thu, 09 Jul 2020 12:16:30 GMT',
date: 'Thu, 09 Jul 2020 12:16:30 GMT',
'set-cookie': 'AKA_A2=A; expires=Thu, 09-Jul-2020 13:16:30 GMT........
我错过了什么吗?
谢谢。
更新:
我使用了 puppeteer stealth 插件和 IP 轮换。这是代码
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())
const AdblockerPlugin = require('puppeteer-extra-plugin-adblocker')
puppeteer.use(AdblockerPlugin({ blockTrackers: true }))
对于 IP 轮换:
var browser = await puppeteer.launch({
headless: true,
args: ['--proxy-server=abcd-efg.proxymesh.com:12345']
});
var page = await browser.newPage();
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
await page.authenticate({
username: 'myusername',
password: 'mypassword'
});
IP 轮换在本地工作,但在云功能上仍然被阻止。
使用住宅代理解决了这个问题。
最初我在云函数和 AWS lambda 中部署了 IP 轮换。我已经使用 proxymesh 服务进行 IP 轮换。但它仅提供数据中心代理。它失败了。然后我尝试使用其他服务的住宅代理。成功了。
我正在尝试使用木偶操作来逃避这个 url https://www.myntra.com/laptop-bag/chumbak/chumbak-unisex-brown-geo-bird--printed-laptop-bag/6795882/buy。
它在我使用 { headless: false }
时工作,但在无头模式下失败。
然后我用这个比较了两种情况下的反应。
const resp = await page.goto(url);
console.log(resp);
然后我发现我们在使用无头模式时需要添加userAgent。所以我添加了这个。
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
现在它在两种情况下都有效本地。但是当我部署到云功能时,它仍然失败。
这是使用 puppeteer 截取的屏幕截图。
这是响应日志的一部分。
_headers:
{ status: '403',
server: 'AkamaiGHost',
'mime-version': '1.0',
'content-type': 'text/html',
'content-length': '395',
expires: 'Thu, 09 Jul 2020 12:16:30 GMT',
date: 'Thu, 09 Jul 2020 12:16:30 GMT',
'set-cookie': 'AKA_A2=A; expires=Thu, 09-Jul-2020 13:16:30 GMT........
我错过了什么吗?
谢谢。
更新:
我使用了 puppeteer stealth 插件和 IP 轮换。这是代码
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth')
puppeteer.use(StealthPlugin())
const AdblockerPlugin = require('puppeteer-extra-plugin-adblocker')
puppeteer.use(AdblockerPlugin({ blockTrackers: true }))
对于 IP 轮换:
var browser = await puppeteer.launch({
headless: true,
args: ['--proxy-server=abcd-efg.proxymesh.com:12345']
});
var page = await browser.newPage();
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
await page.authenticate({
username: 'myusername',
password: 'mypassword'
});
IP 轮换在本地工作,但在云功能上仍然被阻止。
使用住宅代理解决了这个问题。
最初我在云函数和 AWS lambda 中部署了 IP 轮换。我已经使用 proxymesh 服务进行 IP 轮换。但它仅提供数据中心代理。它失败了。然后我尝试使用其他服务的住宅代理。成功了。