如何在无浏览器和代理的情况下使用 puppeteer

How to use puppeteer with browserless and proxy

我不知道如何通过无浏览器和代理使用 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 浏览器,运行s 在后台。当我不使用无浏览器并使用 puppeteer.launch() 函数时,我可以通过它连接。我把这个代理放在 args 中,一切正常,请求通过 tor 代理。我不知道为什么它不适用于无浏览器和 websockets。

当然我尝试了不同的代理。我在类似于 的节点中创建了本地代理(然后代理服务器选项是 --proxy-server=http://127.0.0.1:3001),但错误是相同的,我什至看不到服务器终端中的传入请求,看起来就像他们甚至连代理都没有。

我试过 public 代理地址,同样的错误。

我在 page.goto() 函数中尝试连接的 Chaninng 网站没有任何改变,仍然出现相同的错误。

我是网络抓取的初学者,运行 这里没有选择。任何想法都会有所帮助。

好的,看起来有些 docker 问题。显然,当我尝试从无浏览器内部容器连接到主机上的 tor 时出现问题。我在连接字符串中使用 host.docker.internal 而不是 localhost 并且它起作用了。

为了解决 tor 的问题,您需要确保 torrc 文件已打开 0.0.0.0:9050,否则您可以在任何网络 ip 上使用它它只适用于本地主机。设置后,您可以将 socks5://172.17.0.1:9050 传递给无浏览器的 docker 容器,它可以从主机系统访问 tor 代理。请记住,docker0 ip 可能不同,运行 ip addr show docker0 查找主机的 ip 地址,以便在将其作为代理传递时使用正确的 IP 地址。