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()
关键说明
- 窗口切换:如果链接点击后打开新窗口,必须切换到对应的窗口句柄,否则driver仍会尝试操作原页面的上下文,导致异常。
- 显式等待:
WebDriverWait配合预期条件(比如number_of_windows_to_be、url_changes)能精准等待页面状态变化,比time.sleep更可靠,不会出现等待时间过长或不足的问题。 - 获取URL的方式:直接使用
driver.current_url是Selenium提供的原生方法,比执行JS脚本更稳定,完全避开了执行上下文的问题。
如果链接是在当前页面跳转(而非新窗口),可以去掉窗口切换的代码,只保留等待URL变化的逻辑即可。
内容的提问来源于stack exchange,提问作者Thomas Wuensch
相关产品推荐
相关产品推荐

