Python3.9+Selenium4.0.0如何检测页面文本不存在时跳转新网站
问题根因分析
- 未做元素存在性捕获:Selenium的
driver.find_element()方法如果匹配不到对应元素会直接抛出NoSuchElementException异常,终止程序运行,这就是你打开第一个网站就停止的核心原因,根本不会执行后续的else分支和新标签打开逻辑。 - if判断逻辑错误:
click()方法是无返回值的,所以driver.find_element(...).click() is True的判断结果永远为False,就算成功定位到元素并点击,也不会进入你写的填账号密码的分支。 - 业务逻辑不匹配:你的需求是「提示文本不存在时打开新标签跳转」,你现有代码里打开新标签的逻辑是写在if/else之外的,不管判断结果都会执行,不符合需求。
修复方案
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 from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) driver.maximize_window() driver.get('https://你要访问的第一个网站.com') # 最多等待3秒判断元素是否存在,避免页面未加载完成误判 try: prompt_element = WebDriverWait(driver, 3).until( EC.presence_of_element_located((By.XPATH, '//*[@id="outside"]/div[4]/div/p[contains(text(), "Please enter your Username and Password to continue.")]')) ) # 元素存在,执行点击、登录逻辑 prompt_element.click() loginBox = driver.find_element(By.XPATH, '//input[@id="username"]') loginBox.send_keys("username") password = driver.find_element(By.XPATH, '//input[@type = "password"]') password.send_keys("password") except: # 元素不存在(超时/找不到),执行打开新标签跳转逻辑 driver.execute_script("window.open('about:blank','secondtab');") driver.switch_to.window("secondtab") driver.get("https://你要跳转的第二个网站.com")
改动说明
- 用显式等待+异常捕获的方式处理元素查找逻辑,找不到元素不会终止程序,会自动进入异常分支执行新标签打开逻辑
- 移除了错误的
click() is True判断,定位到元素后直接执行点击、填表单操作 - 把新标签跳转逻辑放到了元素不存在的异常分支里,完全匹配你的业务需求
- 增加了3秒的等待时间,适配页面加载延迟的场景,避免元素已经存在但还没渲染完成就被判定为不存在的误判情况
内容的提问来源于stack exchange,提问作者FinestRyeBread
相关产品推荐
相关产品推荐

