[英]How to use proxy servers with aws lambda + Puppeteer?
我正在尝试在 aws lambda 上使用代理链 package 运行 puppeteer,但我收到此错误消息:
"errorType": "Error",
"errorMessage": "Protocol error (Target.createTarget): Target closed.",
代码:
const chromium = require('chrome-aws-lambda');
const { addExtra } = require("puppeteer-extra");
const puppeteerExtra = addExtra(chromium.puppeteer);
const proxyChain = require('proxy-chain');
const StealthPlugin = require("puppeteer-extra-plugin-stealth");
puppeteerExtra.use(StealthPlugin());
exports.handler = async (event, context, callback) => {
let finalResult = [];
const url = ``;
let browser;
const oldProxyUrl = ''; // --> bright data proxy
const newProxyUrl = await proxyChain.anonymizeProxy(oldProxyUrl);
console.log("newProxyUrl", newProxyUrl)
try {
browser = await puppeteerExtra.launch({
args: ['--no-sandbox', '--disable-setuid-sandbox', `--proxy-server=${newProxyUrl}`],
defaultViewport: chromium.defaultViewport,
executablePath: await chromium.executablePath,
headless: chromium.headless
});
const page = await browser.newPage();
await page.goto(url);
finalResult = await extractElements(page);
} catch (error) {
return callback(error);
} finally {
await browser.close();
}
return callback(null, finalResult);
};
上面的代码在没有代理服务器 url 的 aws lambda 上运行良好。我还在 vercel 和 .netlify 等无服务器功能上测试了相同的代码,没有代理服务器 url 并且它有效。 唯一的问题是当我添加代理服务器 url 时它抛出协议错误。
以下是您可以尝试解决此问题的一些方法:
确保 url 变量具有值。 目前这是一个空字符串,这意味着 page.goto() 方法将没有有效的 URL 可以导航到。
确保 oldProxyUrl 变量有一个值。 目前这是一个空字符串,这意味着 proxyChain.anonymizeProxy() 方法将没有有效的代理进行匿名化。
确保 extractElements() function 已定义并且可以调用。 您提供的代码中不存在此 function,因此您可能需要包含它或修改代码以删除对此 function 的调用。
检查您的 AWS Lambda function 的日志,看看是否有任何其他错误消息可能提供有关该问题的更多信息。
查看 puppeteer-extra-plugin-stealth 和 proxy-chain 包的文档,看看是否存在任何已知问题或与 AWS Lambda 的兼容性问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.