接入指南
Playwright 代理设置:Python 与 Node
Playwright 在启动浏览器时接收代理设置,用户名和密码各有单独的字段。Python 和 Node 的选项名称相同,两种写法都在下面。
开始之前
- Python 版 Playwright(pip install playwright)或 Node 版(npm i playwright)。
- 用 playwright install chromium 下载好的浏览器。
- 你的服务的 HOST、PORT、USERNAME 和 PASSWORD。
你的连接信息
登录控制台,打开你购买的服务。服务页面上会显示该服务的主机、端口、用户名和密码。ProxyPanda 没有一个统一的固定地址,所以每次都请从那里复制。指南中的代码使用下面这些占位符,请逐一替换成你自己的值。
- HOST
- 该服务的代理地址,按服务页面上显示的原样填写。
- PORT
- 要连接的端口。请和主机一起复制,因为不同服务的端口可能不同。
- USERNAME
- 你的代理登录名。它与你登录控制台所用的邮箱是分开的。
- PASSWORD
- 请完整复制。住宅代理在控制台中选择的选项会附加在密码末尾,凭记忆手动输入的密码会丢失这些选项。
把你用来连接的 IP 地址加入服务的白名单,就可以不用用户名和密码。这时代码里只需要 HOST 和 PORT。
示例都使用 HTTP,它可以通过加密隧道访问 https 网站。SOCKS5 同样可用:住宅代理的端口两种都接受,ISP 和数据中心代理在控制台里切换协议。
步骤
在 Python 中给 launch() 传入 proxy
server 只写协议、主机和端口。username 和 password 放在各自的键里,Playwright 会用它们响应代理的登录验证。
check_ip.py from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch( proxy={"server": "http://HOST:PORT", "username": "USERNAME", "password": "PASSWORD"} ) page = browser.new_page() page.goto("https://api.ipify.org?format=json") print(page.inner_text("body")) browser.close()在 Node 中做同样的启动
Node API 的选项名称完全一样。把文件保存为 .mjs 扩展名,顶层 await 才能使用,然后用 node 运行。
check-ip.mjs import { chromium } from 'playwright'; const browser = await chromium.launch({ proxy: { server: 'http://HOST:PORT', username: 'USERNAME', password: 'PASSWORD' }, }); const page = await browser.newPage(); await page.goto('https://api.ipify.org?format=json'); console.log(await page.textContent('body')); await browser.close();给每个上下文单独设置代理
代理也可以按上下文设置:Python 用 new_context(proxy=...),Node 用 newContext({ proxy })。这样一个浏览器就能运行多个配置,每个使用各自的凭据。
contexts.py context = browser.new_context( proxy={"server": "http://HOST:PORT", "username": "USERNAME", "password": "PASSWORD"} ) page = context.new_page()拦截图片、媒体和字体
一个页面加载的内容远不止 HTML。住宅代理的每个字节都计入账单,所以把脚本用不到的资源类型直接中止。
block_media.py page.route( "**/*", lambda route: route.abort() if route.request.resource_type in ("image", "media", "font") else route.continue_(), )
轮换 IP 与粘性 IP
浏览器加载一个页面会打开好几条连接。住宅代理选“随机 IP”时,每条新连接都可能从不同地址发出,网站可能看到同一次访问来自好几个地方。想让浏览看起来像同一个访客,请选“粘性 IP”。
ISP 和数据中心 IP 在整个租期内保持同一个地址,适合每天都要回来使用的已登录上下文。
常见错误与解决办法
Page.goto: Timeout exceeded,却看不到 407
用户名或密码错误时,Chromium 会不断重试代理登录,最后导航超时,而不会报告 407。调大超时之前,先检查凭据。
net::ERR_PROXY_CONNECTION_FAILED
HOST:PORT 上没有响应。与服务页面逐一核对,并确认服务仍在有效期内。
net::ERR_TUNNEL_CONNECTION_FAILED
已经连上代理,但代理无法建立到该网站的隧道。先重试一次。如果只有某一个网站反复出现,请把网址带到 Discord。
页面在你自己的浏览器里正常,在 Playwright 里不正常
无头 Chromium 的用户代理里写着 HeadlessChrome。在 Python 中用 new_context(user_agent=...),在 Node 中用 userAgent,设置一个普通的用户代理;遇到会检查的网站,可以改用有界面模式启动。
其他接入指南
有不明白的词? 术语表用大白话解释。
卡在某一步了?
把命令和报错贴到 Discord,记得先删掉密码。那里的人大多遇到过这些错误。