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

Python Selenium中driver.find_element(By.XPATH)失效问题求助

问题排查与修复方案

核心问题:Driver初始化未传入必要参数

你定义了service和options对象,但实例化Chrome驱动时没有把这两个参数传进去,导致驱动未正确加载,因此打开空白页面。

修复步骤

  1. 修正Driver初始化代码
    将原代码中的:

    driver = webdriver.Chrome()
    

    修改为:

    driver = webdriver.Chrome(service=service, options=options)
    
  2. 替换超长等待为合理等待
    time.sleep(1000)会让程序暂停1000秒,完全没必要,建议改用Selenium的显式等待确保元素加载完成,避免因页面加载慢导致找不到元素:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 替换time.sleep(1000)为以下代码
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "user-message"))
    )
    
  3. 处理页面可能存在的弹窗
    访问该页面时可能会出现广告弹窗,需要先关闭它,否则会影响元素定位:

    try:
        close_button = WebDriverWait(driver, 5).until(
            EC.element_to_be_clickable((By.ID, "at-cv-lightbox-close"))
        )
        close_button.click()
    except:
        # 没有弹窗则跳过
        pass
    

完整修复后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
service = ChromeService(executable_path="C:/Users/SnappFood/.cache/selenium/chromedriver/win32/110.0.5481.77/chromedriver.exe")

# 传入service和options
driver = webdriver.Chrome(service=service, options=options)
driver.maximize_window()
driver.get("https://demo.seleniumeasy.com/basic-first-form-demo.html")

# 处理可能的广告弹窗
try:
    close_button = WebDriverWait(driver, 5).until(
        EC.element_to_be_clickable((By.ID, "at-cv-lightbox-close"))
    )
    close_button.click()
except:
    pass

# 等待消息输入框加载完成
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "user-message"))
)

message_field = driver.find_element(By.ID,'user-message')
message_field.send_keys("Hello World")
show_message_button = driver.find_element(By.XPATH,'//*[@id="get-input"]/button')
show_message_button.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:36:59