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

WebDriver无法检测断链求助:如何捕获404页面提示文本?

解决Selenium无法捕获404页面提示文本的问题

问题描述

可以通过以下代码正常访问页面:

driver.get('https://www.w3.org/')

但测试无效链接(如https://www.w3.org/fault_link)时,页面显示“This page does not exist.”,尝试三种方法均无法捕获该提示:

  1. XPATH定位文本元素失败:
link = "https://www.w3.org/fault_link"

if driver.find_elements_by_xpath("//*[contains(text(), 'This page does not exist')]"):
    logger.info("Found fault link %s", link)
  1. 定位元素后匹配文本失败(注:代码中变量e应为element):
element = driver.find_element(
                    By.XPATH, '//*[@id="__next"]/div[1]/main')

# 打印element.text可看到包含“This page does not exist.”的内容
logger.info(element.text)

if e.text=='This page does not exist.':
     logger.info("Found fault link %s", link)
  1. 使用search方法查找失败:
if search("This page does not exist.", element.text):
    logger.info("Found fault link %s", link)

解决建议

1. 等待元素加载完成再判断

第一种方法失败大概率是页面未加载完成就执行了元素查找,需添加显式等待确保元素出现:

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

link = "https://www.w3.org/fault_link"
driver.get(link)

try:
    # 最多等待10秒,直到包含目标文本的元素出现
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//*[contains(text(), 'This page does not exist')]"))
    )
    logger.info("Found fault link %s", link)
except:
    # 未找到目标元素,说明不是断链页面
    pass

2. 清理文本冗余字符后匹配

第二种方法直接用==匹配易因换行、空格等冗余字符失败,先清理文本再判断:

element = driver.find_element(By.XPATH, '//*[@id="__next"]/div[1]/main')
target_text = "This page does not exist."

# 去除首尾空格、替换换行和多余空格
cleaned_text = element.text.strip().replace('\n', ' ').replace('  ', ' ')

if target_text in cleaned_text:
    logger.info("Found fault link %s", link)

3. 正确使用字符串查找或正则匹配

第三种方法的search若为正则搜索需导入re模块,简单场景直接用in更便捷:

# 方法A:直接判断字符串包含关系
if "This page does not exist." in element.text:
    logger.info("Found fault link %s", link)

# 方法B:正则匹配(适合复杂文本场景)
import re
if re.search(r"This page does not exist\.", element.text):
    logger.info("Found fault link %s", link)

4. 额外验证:结合HTTP状态码(可选)

可先通过requests获取链接状态码,再结合页面文本双重确认:

import requests

link = "https://www.w3.org/fault_link"
response = requests.get(link)

if response.status_code == 404:
    driver.get(link)
    # 执行上述页面文本验证逻辑
    logger.info("Found fault link %s", link)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:31:04