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

Selenium点击元素后抛出“no such execution context”异常求助

解决Selenium点击链接后出现“no such execution context”异常的问题

你遇到的问题是点击链接后抛出WebDriverException: Message: no such execution context,本质是点击操作触发页面跳转(或新窗口打开)时,原页面的执行上下文已失效,而固定的time.sleep(2)无法保证页面完全加载完成,导致后续执行JS获取URL的操作失败。

以下是针对性的解决办法,优化后的代码能稳定完成点击后的操作:

核心优化点

  • 切换到新窗口(如果链接在新窗口打开)
  • 用显式等待替代固定延时,确保页面加载完成
  • 用更稳定的方式获取当前URL

修改后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import random

x = random.randrange(1, 16)
i = f"mntl-recipe-card-meta_{x}-0"
url = "https://www.eatingwell.com/recipes/17947/mealtimes/dinner/"

driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)

# 定位并点击目标链接
link = driver.find_element(By.ID, i)
link.click()

# 等待新窗口打开,最多等待10秒
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
# 获取所有窗口句柄,切换到最新打开的窗口
all_windows = driver.window_handles
driver.switch_to.window(all_windows[-1])

# 等待页面URL发生变化,确认跳转完成
WebDriverWait(driver, 10).until(EC.url_changes(url))

# 直接通过driver获取当前URL,无需执行JS
current_url = driver.current_url
print("Current URL:", current_url)

driver.quit()

关键说明

  1. 窗口切换:如果链接点击后打开新窗口,必须切换到对应的窗口句柄,否则driver仍会尝试操作原页面的上下文,导致异常。
  2. 显式等待:WebDriverWait配合预期条件(比如number_of_windows_to_be、url_changes)能精准等待页面状态变化,比time.sleep更可靠,不会出现等待时间过长或不足的问题。
  3. 获取URL的方式:直接使用driver.current_url是Selenium提供的原生方法,比执行JS脚本更稳定,完全避开了执行上下文的问题。

如果链接是在当前页面跳转(而非新窗口),可以去掉窗口切换的代码,只保留等待URL变化的逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:13:35