如何在无浏览器和代理的情况下使用 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 地址。
我不知道如何通过无浏览器和代理使用 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 地址。