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

如何在Playwright(Python)中点击“Next”按钮直至其消失?

问题解决建议

你的代码核心问题是循环在Playwright的上下文块(with语句)之外,当with块执行完毕后,Playwright会自动关闭浏览器,导致循环还没开始就无法继续操作。以下是具体修复方案:

关键修复点

  • 调整代码结构:将while循环放到with sync_playwright() as p:的代码块内部,确保浏览器在循环过程中持续保持打开状态。
  • 优化元素定位:原get_by_text("Next")可能存在匹配歧义,改用更精准的CSS选择器定位下一页按钮(目标按钮在li.next节点下的<a>标签)。
  • 精准捕获异常:避免捕获所有异常,只针对元素不存在或超时的情况处理,防止掩盖其他潜在问题。

修复后的完整代码

from playwright.sync_api import sync_playwright
from playwright._impl._errors import TimeoutError, ElementNotFoundError

with sync_playwright() as p:
    browser = p.firefox.launch(headless=False)
    page = browser.new_page()
    page.goto("https://books.toscrape.com/")

    while True:
        try:
            # 精准定位下一页按钮
            next_btn = page.locator("li.next a")
            # 等待元素可交互并点击,设置3秒超时
            next_btn.click(timeout=3000)
        except (TimeoutError, ElementNotFoundError):
            # 无下一页按钮时退出循环
            break
    # 可选:手动关闭浏览器(with块结束后也会自动关闭)
    browser.close()

补充说明

Playwright的click()方法默认会自动等待元素变为可交互状态,无需像Selenium那样手动添加大量等待逻辑。如果需要更严格的等待,也可以在点击前添加:

next_btn.wait_for(state="visible")

内容的提问来源于stack exchange,提问作者What

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:31:09