跳转到内容
Guides 2 分钟阅读 1255 次浏览

在 Python 中通过 Playwright 使用代理

在 Python 版 Playwright 中配置代理:HTTP 与 SOCKS5 代理、认证、浏览器 context 以及绕过 anti-bot。

在 Python 中通过 Playwright 使用代理

在 Python 中通过 Playwright 使用代理

Playwright 与代理

Playwright 是 Microsoft 推出的浏览器自动化框架,支持 Chromium、Firefox 和 WebKit。Playwright 的 Python 版本在浏览器层面以及针对单个 context 都内置了代理支持。

安装

pip install playwright
playwright install  # 下载浏览器

基础代理配置

HTTP 代理

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(
        proxy={
            "server": "http://proxy_ip:port"
        }
    )
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    print(page.content())
    browser.close()

带认证

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(
        proxy={
            "server": "http://proxy_ip:port",
            "username": "user",
            "password": "pass"
        }
    )
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    print(page.content())
    browser.close()

SOCKS5 代理

browser = p.chromium.launch(
    proxy={"server": "socks5://proxy_ip:port"}
)

异步模式

import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            proxy={
                "server": "http://proxy_ip:port",
                "username": "user",
                "password": "pass"
            }
        )
        page = await browser.new_page()
        await page.goto("https://httpbin.org/ip")
        content = await page.content()
        print(content)
        await browser.close()

asyncio.run(main())

Context 级别的代理

Playwright 允许在同一个浏览器内为不同的 context(配置文件)设置不同的代理:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()

    # Context 1 —— 美国代理
    context1 = browser.new_context(
        proxy={
            "server": "http://us_proxy:port",
            "username": "user",
            "password": "pass"
        }
    )

    # Context 2 —— 德国代理
    context2 = browser.new_context(
        proxy={
            "server": "http://de_proxy:port",
            "username": "user",
            "password": "pass"
        }
    )

    page1 = context1.new_page()
    page2 = context2.new_page()

    page1.goto("https://httpbin.org/ip")
    page2.goto("https://httpbin.org/ip")

    print("US:", page1.content())
    print("DE:", page2.content())

    browser.close()

这是一项很强的能力:一个浏览器,多个 context,各自使用不同的代理和指纹。

对特定域名绕过代理

browser = p.chromium.launch(
    proxy={
        "server": "http://proxy_ip:port",
        "bypass": "localhost,*.local,example.com"
    }
)

bypass 列表中的域名会直接访问,不经过代理。

Headless 与 headed 模式

# Headless(无 GUI)—— 用于采集
browser = p.chromium.launch(headless=True, proxy={"server": "http://proxy:port"})

# Headed(有 GUI)—— 用于调试
browser = p.chromium.launch(headless=False, proxy={"server": "http://proxy:port"})

使用不同的浏览器

Playwright 支持三种引擎:

# Chromium
browser = p.chromium.launch(proxy=proxy_config)

# Firefox
browser = p.firefox.launch(proxy=proxy_config)

# WebKit (Safari)
browser = p.webkit.launch(proxy=proxy_config)

三者对代理的支持完全相同。

Stealth 模式与反检测规避

Playwright 会被 anti-bot 系统识别。要绕过:

playwright-stealth

pip install playwright-stealth
from playwright.sync_api import sync_playwright
from playwright_stealth import stealth_sync

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={"server": "http://proxy:port"})
    page = browser.new_page()
    stealth_sync(page)  # 应用 stealth 补丁
    page.goto("https://target-site.com")

规避建议

  1. 使用住宅代理或移动代理
  2. 设置真实的 User-Agent
  3. 配置 viewport 尺寸
  4. 在动作之间加入延迟
  5. 模拟鼠标移动与滚动

通过代理截图和生成 PDF

page.goto("https://example.com")
page.screenshot(path="screenshot.png", full_page=True)
page.pdf(path="page.pdf")

拦截请求

def handle_route(route):
    # 修改请求
    headers = route.request.headers
    headers["X-Custom-Header"] = "value"
    route.continue_(headers=headers)

page.route("**/*", handle_route)
page.goto("https://example.com")

实战示例:带轮换的采集

import asyncio
from playwright.async_api import async_playwright
import random

PROXIES = [
    {"server": "http://proxy1:port", "username": "u", "password": "p"},
    {"server": "http://proxy2:port", "username": "u", "password": "p"},
    {"server": "http://proxy3:port", "username": "u", "password": "p"},
]

async def scrape_page(playwright, url):
    proxy = random.choice(PROXIES)
    browser = await playwright.chromium.launch(proxy=proxy)
    page = await browser.new_page()
    try:
        await page.goto(url, timeout=30000)
        title = await page.title()
        return title
    except Exception as e:
        return f"Error: {e}"
    finally:
        await browser.close()

async def main():
    urls = [f"https://example.com/page/{i}" for i in range(10)]
    async with async_playwright() as p:
        tasks = [scrape_page(p, url) for url in urls]
        results = await asyncio.gather(*tasks)
        for url, result in zip(urls, results):
            print(f"{url}: {result}")

asyncio.run(main())

总结

Playwright 是在 Python 中使用代理的强大工具。Context 级别的代理支持让您可以在同一个浏览器内运行多个使用不同 IP 的会话。配合 stealth 补丁与住宅代理,Playwright 能够有效采集受保护的网站。

已更新: 06.03.2026
返回分类

试用我们的代理

遍布 100+ 国家的 20,000+ 代理

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.