在Apify控制台中使用Playwright对接Apify试用代理的正确代码求助
在Apify控制台中使用Playwright Python对接Apify代理的正确代码
你的原代码存在两个核心问题:
- 混用了Playwright的同步API(
sync_playwright)和异步语法(await),这会直接导致运行错误 - 手动填写代理信息的方式不符合Apify平台规范,平台会自动注入代理相关环境变量,无需手动配置
以下是适配Apify平台的正确代码,分为同步和异步两个版本:
同步版本
from playwright.sync_api import sync_playwright import os with sync_playwright() as p: # 从Apify环境变量中获取代理配置 proxy_config = { "server": f"http://{os.environ['APIFY_PROXY_HOSTNAME']}:{os.environ['APIFY_PROXY_PORT']}", "username": os.environ['APIFY_PROXY_USERNAME'], "password": os.environ['APIFY_PROXY_PASSWORD'] } # 启动浏览器时直接配置代理上下文 browser = p.chromium.launch(headless=True) context = browser.new_context(proxy=proxy_config) page = context.new_page() # 访问目标页面 page.goto("https://example.com") # 执行你的爬取/自动化逻辑 # ... # 关闭资源 page.close() context.close() browser.close()
异步版本
如果你更倾向于使用异步API:
import asyncio from playwright.async_api import async_playwright import os async def main(): async with async_playwright() as p: # 从Apify环境变量中获取代理配置 proxy_config = { "server": f"http://{os.environ['APIFY_PROXY_HOSTNAME']}:{os.environ['APIFY_PROXY_PORT']}", "username": os.environ['APIFY_PROXY_USERNAME'], "password": os.environ['APIFY_PROXY_PASSWORD'] } # 启动浏览器时配置代理上下文 browser = await p.chromium.launch(headless=True) context = await browser.new_context(proxy=proxy_config) page = await context.new_page() # 访问目标页面 await page.goto("https://example.com") # 执行你的爬取/自动化逻辑 # ... # 关闭资源 await page.close() await context.close() await browser.close() asyncio.run(main())
关键说明
- Apify平台会自动为运行中的Actor注入
APIFY_PROXY_HOSTNAME、APIFY_PROXY_PORT、APIFY_PROXY_USERNAME、APIFY_PROXY_PASSWORD这些环境变量,无需手动填写 - 必须在创建浏览器上下文(
new_context)时就配置代理,而不是先创建页面再修改代理设置,这是Playwright的规范要求 - 同步API和异步API要严格区分,不能混用
await和同步调用
内容的提问来源于stack exchange,提问作者atta
相关产品推荐
相关产品推荐

