如何在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
相关产品推荐
相关产品推荐

