开始之前

  • 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 和数据中心代理在控制台里切换协议。

步骤

  1. 在 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()
  2. 在 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();
  3. 给每个上下文单独设置代理

    代理也可以按上下文设置: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()
  4. 拦截图片、媒体和字体

    一个页面加载的内容远不止 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,设置一个普通的用户代理;遇到会检查的网站,可以改用有界面模式启动。

选择哪条产品线

浏览器自动化产生的数据量比普通 HTTP 请求大得多。目标网站不封服务器 IP 时,数据中心 IP 能把成本压低。会检查网络来源的网站,用住宅代理加“粘性 IP”;同一个配置每天都要登录时,用 ISP。

卡在某一步了?

把命令和报错贴到 Discord,记得先删掉密码。那里的人大多遇到过这些错误。

加入 Discorddiscord.gg/proxypanda
$5 起步去 Discord 问