【发布时间】:2021-02-13 16:51:23
【问题描述】:
我不知道如何将 puppeteer 与无浏览器和代理一起使用。我不断收到代理连接错误。
我像这样在 docker 中运行无浏览器:
docker run -p 3000:3000 -e "MAX_CONCURRENT_SESSIONS=5" -e "MAX_QUEUE_LENGTH=0" -e "PREBOOT_CHROME=true" -e "CONNECTION_TIMEOUT=300000" --restart always browserless/chrome
我尝试连接的配置中的 Puppeteer 选项:
const args = [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-infobars',
'--window-position=0,0',
'--ignore-certifcate-errors',
'--window-size=1400,900',
'--ignore-certifcate-errors-spki-list',
];
const options = {
args,
headless: true,
ignoreHTTPSErrors: true,
defaultViewport: null,
browserWSEndpoint: `ws://localhost:3000?--proxy-server=socks5://127.0.0.1:9055`,
}
我如何连接:
const browser = await puppeteer.connect(config.options);
const page = await browser.newPage();
await page.goto('http://example.com', { waitUntil: 'networkidle0' }
我得到的错误:
Error: net::ERR_PROXY_CONNECTION_FAILED at http://example.com
at navigate (C:\...\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:115:23)
at processTicksAndRejections (internal/process/task_queues.js:94:5)
at async FrameManager.navigateFrame (C:\...\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:90:21)
at async Frame.goto (C:\...\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:417:16)
at async Page.goto (C:\...\node_modules\puppeteer\lib\cjs\puppeteer\common\Page.js:825:16)
我在上面的例子中使用的代理是 TOR 浏览器,它在后台运行。当我不使用无浏览器并使用 puppeteer.launch() 函数时,我可以通过它进行连接。我把这个代理放在 args 中,一切正常,请求通过 tor 代理。我不知道为什么它不适用于无浏览器和 websockets。
当然,我尝试了不同的代理。我在类似于How to create a simple http proxy in node.js? 的节点中创建了本地代理(代理服务器选项然后是--proxy-server=http://127.0.0.1:3001),但错误是一样的,我什至看不到服务器终端中的传入请求,看起来他们没有甚至连代理都没有。
我尝试了公共代理地址,同样的错误。
我试图在page.goto() 函数中连接的Chaninng 网站没有改变任何东西,仍然出现同样的错误。
我是网络抓取的初学者,在这里没有选择。任何想法都会有所帮助。
【问题讨论】:
标签: node.js web-scraping proxy puppeteer chromium