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

WebDriver新标签页打开窗口后无法读取页面元素的问题咨询

问题

尝试读取新标签页窗口元素的代码执行后始终显示“not enetered”:

webd = webdriver.Chrome(service=s, options=options)
url = "some url"
webd.execute_script("window.open('" + url + "','_blank');")
if len(webd.find_elements(By.TAG_NAME, "pre")) > 0:
    print("entered")
else:
    print("not enetered")

若在同一标签页打开URL,代码可正常运行:

webd = webdriver.Chrome(service=s, options=options)
url = "some url"
webd.get(url)
if len(webd.find_elements(By.TAG_NAME, "pre")) > 0:
    print("entered")
else:
    print("not enetered")

请问在新标签页的代码中,是否遗漏了某些关键步骤?

解决方案

你确实遗漏了两个关键步骤:

  • 切换到新标签页上下文:WebDriver默认会停留在原窗口的操作上下文里,执行window.open后不会自动切换到新标签页。需要通过window_handles获取所有窗口句柄,切换到新打开的标签页(通常是句柄列表的最后一个)。
  • 等待页面元素加载:新标签页打开后,页面需要时间加载完成,直接查找元素可能因为DOM未渲染完毕导致找不到,建议用显式等待确保目标元素存在。

修正后的代码示例:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

webd = webdriver.Chrome(service=s, options=options)
url = "some url"
# 记录原窗口句柄
original_window = webd.current_window_handle
# 打开新标签页
webd.execute_script("window.open('" + url + "','_blank');")

# 切换到新标签页
for handle in webd.window_handles:
    if handle != original_window:
        webd.switch_to.window(handle)
        break

# 等待pre元素加载完成
try:
    WebDriverWait(webd, 10).until(
        EC.presence_of_element_located((By.TAG_NAME, "pre"))
    )
    print("entered")
except:
    print("not enetered")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:31:16