Selenium Python点击按钮后代码停滞问题求助
问题解决:Selenium Python点击按钮后代码停滞
问题分析
点击按钮后弹出新窗口,但代码卡在click()方法处,核心原因是:
- Selenium默认会等待当前页面加载完成,但点击后原页面目标元素消失,同时新窗口触发,导致原页面的加载状态无法正常完成,
click()方法持续阻塞。 - 隐式等待和固定sleep无法适配异步触发的窗口切换场景。
解决方案
1. 用显式等待确保元素可点击再执行点击
通过WebDriverWait等待目标元素处于可点击状态,避免因元素未完全渲染导致的点击异常。
2. 点击后立即切换到新窗口
点击触发新窗口后,Selenium的焦点仍停留在原窗口,需主动切换到新窗口句柄,打破原页面的状态等待阻塞。
修改后的代码示例
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By print("I gonna click in the toaster") # 显式等待元素可点击 wait = WebDriverWait(site, 10) button = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[text()='Clique para visualizar']"))) button.click() # 获取所有窗口句柄,切换到新打开的窗口 original_window = site.current_window_handle for window_handle in site.window_handles: if window_handle != original_window: site.switch_to.window(window_handle) break print("The toaster was clicked")
额外排查点
- 若按钮点击触发了异步请求,可在切换窗口后,再等待新窗口的特定元素或URL加载完成
- 若按钮带有
target="_blank"属性,可提前记录原窗口句柄,点击后直接对比获取新句柄
内容的提问来源于stack exchange,提问作者Emanuel Borges Albano
相关产品推荐
相关产品推荐

