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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:07:34