问答 我使用 playwright 启动 chromium 浏览器,能启动,但是一直卡在新标签页,不输入网址。怎么回事儿呢?

因泰四特 · 2026年01月05日 · 最后由 我吃香菜了 回复于 2026年01月06日 · 2016 次阅读

from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.launch(headless=False, args=['--no-sandbox', '--disable-setuid-sandbox', '--enable-chrome-browser-cloud-management'])
    context = browser.new_context(ignore_https_errors=True)  # 关键参数
    page = context.new_page()
    page.goto("https://www.baidu.com")
    # ... 后续操作
共收到 4 条回复 时间 点赞

可以先用 page.pause() 调试一下具体卡在了哪一步。无非就是 context_new_page() 和 goto() 出了问题,两者有不同的对应问题,如果是前者建议清理下环境,重新按照下 playwright 以及对应的浏览器。

这个问题可能有几个原因。让我帮你分析并解决:

  1. 首先,检查基本问题: from playwright.sync_api import sync_playwright import time

with sync_playwright() as p:
browser = p.chromium.launch(
headless=False,
args=['--no-sandbox', '--disable-setuid-sandbox']
)

# 添加更详细的上下文配置
context = browser.new_context(
ignore_https_errors=True,
viewport={'width': 1920, 'height': 1080}
)

page = context.new_page()

# 添加等待和超时设置
page.set_default_timeout(30000) # 30 秒超时

print("正在访问百度...")
response = page.goto("https://www.baidu.com", wait_until="domcontentloaded")

if response:
print(f"响应状态码: {response.status}")

# 等待页面加载
time.sleep(3)

# 截图验证
page.screenshot(path="baidu.png")
print("截图已保存为 baidu.png")

# 保持浏览器打开以便观察
input("按回车键关闭浏览器...")

  1. 可能的原因和解决方案: 原因 1:网络代理问题 # 尝试设置代理 context = browser.new_context( ignore_https_errors=True, proxy={"server": "http://your-proxy:port"} # 如果需要代理 ) 原因 2:证书问题 # 禁用安全证书检查 context = browser.new_context( ignore_https_errors=True, accept_downloads=True ) 原因 3:使用隐身模式 # 使用隐身上下文 context = browser.new_context( ignore_https_errors=True, no_viewport=True, # 不使用默认视口 java_script_enabled=True )
  2. 调试版本: from playwright.sync_api import sync_playwright import logging

启用详细日志

logging.basicConfig(level=logging.DEBUG)

with sync_playwright() as p:
# 检查可用的浏览器
print("可用浏览器:", p.chromium.executable_path)

# 使用更简单的启动参数
browser = p.chromium.launch(
headless=False,
slow_mo=1000, # 添加延迟以便观察
args=[
'--start-maximized',
'--disable-blink-features=AutomationControlled' # 隐藏自动化特征
]
)

context = browser.new_context(
ignore_https_errors=True,
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
)

page = context.new_page()

# 监听控制台和网络事件
page.on("console", lambda msg: print(f"控制台: {msg.text}"))
page.on("response", lambda response: print(f"响应: {response.url} {response.status}"))

try:
print("开始导航...")
# 尝试不同的等待策略
response = page.goto(
"https://www.baidu.com",
wait_until="networkidle", # 或 "commit", "load", "domcontentloaded"
timeout=60000
)
print(f"导航完成,标题: {page.title()}")

except Exception as e:
print(f"错误: {e}")

input("观察页面,按回车退出...")

  1. 快速测试脚本: from playwright.sync_api import sync_playwright

with sync_playwright() as p:
# 最简单的配置
browser = p.chromium.launch(headless=False)
page = browser.new_page()

# 直接访问
page.goto("https://www.baidu.com")

# 检查是否成功
print(f"页面标题: {page.title()}")
print(f"页面 URL: {page.url}")

input("如果看到百度页面,按回车退出...")
browser.close()

  1. 如果以上都不行,尝试: 重新安装 Playwright: pip uninstall playwright pip install playwright playwright install chromium 检查端口占用: 关闭其他 Chrome/Chromium 实例 使用无头模式测试: browser = p.chromium.launch(headless=True) # 先测试无头模式 检查系统权限: 确保有足够的权限运行浏览器 在 Linux/Mac 上可能需要安装依赖 试试这些方案,看哪个能解决你的问题。如果还不行,请告诉我你的操作系统和环境信息。

Ai,你值得拥有

代码是对的,看起来没问题,检查下自己的运行环境,如果执行了 pip install -U playwright 升级了模块,那务必执行下 playwright install 重新安装新版本浏览器

设置 set_default_timeout 让它把异常抛出来。new_context 先试用默认参数,后面再按需调整。看到异常就知道怎么解决了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册