You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Playwright中page.wait_for_url()正则表达式失效?与JavaScript版本存在实现差异

Python Playwright中page.wait_for_url()正则表达式失效?与JavaScript版本存在实现差异

嘿,这个问题我之前踩过坑!本质是Playwright的Python和JavaScript版本对wait_for_url/waitForURL的参数处理逻辑不一样,导致你写的Python代码没生效~

先给你拆解问题出在哪:

  • 你写的Python代码里,page.wait_for_url(r"docs/api")传的是普通字符串,Playwright Python对普通字符串的处理逻辑是前缀匹配(如果带*/?这类通配符才会按glob模式),不是子字符串包含匹配。而目标URL是https://playwright.dev/python/docs/api/class-page,前缀是https://...,显然和docs/api不匹配,所以会超时失败。
  • 而JavaScript版本里,你传的是正则字面量/docs\/api/,Playwright JS会直接用这个正则去匹配整个URL的任意部分,自然能命中docs/api这段子串,所以成功了。

下面给你两种可行的解决方案:

方案一:用正则表达式(和JS版本逻辑对齐)

需要先导入re模块,用re.compile()把正则字符串编译成re.Pattern对象,再传给wait_for_url。修改后的代码如下:

from playwright.sync_api import sync_playwright
import re

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://playwright.dev/python/docs/api/class-page")
    # 编译正则表达式后传入
    page.wait_for_url(re.compile(r"docs/api"))
    browser.close()

方案二:用glob模式匹配子串

如果不想用正则,也可以用glob通配符**来匹配任意路径部分,这样就可以命中包含docs/api的URL:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://playwright.dev/python/docs/api/class-page")
    # 用**匹配任意前缀和后缀
    page.wait_for_url("**/docs/api/**")
    browser.close()

最后再补个小细节,帮你区分两边的实现差异:

  • JavaScript Playwright:page.waitForURL()支持直接传入正则字面量,内部会用正则匹配整个URL内容;
  • Python Playwright:page.wait_for_url()的参数类型决定匹配逻辑:
    • 普通字符串:无通配符则前缀匹配,有通配符则glob匹配;
    • re.Pattern对象:按正则规则匹配;
    • 自定义函数:按你写的逻辑判断是否匹配。

备注:内容来源于stack exchange,提问作者Maksim Shamihulau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 07:03:12