【问题标题】:How to use puppeteer with browserless and proxy如何将 puppeteer 与无浏览器和代理一起使用
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-05-14
        • 1970-01-01
        • 2020-05-10
        • 1970-01-01
        • 1970-01-01
        • 2013-08-17
        • 1970-01-01
        • 2018-08-28
        • 2020-11-20
        相关资源
        最近更新 更多