Playwright Python如何在指定步骤后停用代理改用本地网络
Playwright Python 代理切换实现方案
核心实现思路
Playwright的浏览器上下文启动后无法直接修改代理配置,所以我们通过「保存登录会话状态 + 重启无代理上下文」的方式实现切换,既保留登录状态,又能切换到本地网络:
- 先用带代理的上下文完成谷歌登录和目标按钮点击操作
- 导出该上下文的会话数据(Cookie、LocalStorage等)
- 关闭带代理的上下文,创建全新的无代理上下文
- 导入之前保存的会话状态,继续后续本地网络操作
完整代码示例
from playwright.sync_api import sync_playwright def main(): with sync_playwright() as p: # 配置代理参数,替换成你实际的代理信息 proxy_settings = { "server": "http://your-proxy-address:port", "username": "proxy-username", # 不需要认证可删除这两行 "password": "proxy-password" } # 启动带代理的浏览器上下文 browser = p.chromium.launch(headless=False) proxy_context = browser.new_context(proxy=proxy_settings) # 执行谷歌登录流程 page = proxy_context.new_page() page.goto("https://accounts.google.com") # 这里填写你的登录逻辑:输入账号、密码、处理验证等 # ... # 点击目标按钮 page.click("text='YourselfChoose if your account is for personal'") # 请根据实际页面调整选择器 # 保存登录会话状态到本地文件 proxy_context.storage_state(path="google_session.json") # 关闭带代理的上下文,节省流量和资源 proxy_context.close() # 创建无代理的新上下文,加载之前保存的会话状态 no_proxy_context = browser.new_context(storage_state="google_session.json") # 在无代理上下文里继续后续操作 new_page = no_proxy_context.new_page() new_page.goto("https://your-next-target-url.com") # 现在使用本地网络访问 # 后续业务逻辑代码 # ... # 清理资源 browser.close() if __name__ == "__main__": main()
关键说明
- 代理配置:替换
proxy_settings里的服务器地址、账号密码,无认证需求可删除username和password字段 - 元素选择器:按钮的选择器请根据实际页面DOM结构调整(比如用CSS选择器
"button[data-testid='personal-account-btn']") - 会话状态:
storage_state方法会把登录后的Cookie、LocalStorage等数据保存到JSON文件,新上下文加载后直接保持登录状态 - 异步版本:如果使用异步Playwright,只需替换
sync_playwright为async_playwright,并给所有异步方法添加await关键字即可
内容的提问来源于stack exchange,提问作者Sabir
相关产品推荐
相关产品推荐

