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

Python Selenium使用XPath时遇两类WebDriver报错求助

解决Selenium自动化搜索的两类错误

1. 处理AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'

这个错误是因为你使用的是Selenium 4.x版本,该版本已废弃find_element_by_xpath()这类直接以定位方式命名的旧方法,必须改用find_element()配合By类的新写法。你当前代码里的写法是正确的,若之前写过driver.find_element_by_xpath("xxx")就会触发该报错,确保统一使用新写法:

from selenium.webdriver.common.by import By

# 正确定位写法
search_box = driver.find_element(By.XPATH, "//input[@id='text' and @class='form-control form-group']")

2. 处理WebDriverException: To submit an element, it must be nested inside a form element

这个错误是因为你尝试调用输入框的submit()方法,但该输入框不在<form>标签内部——Selenium的submit()方法仅对form嵌套内的元素生效。解决办法是直接找到页面上的提交按钮,调用click()方法触发搜索:

  • 先通过网页检查工具找到提交按钮的定位器(比如按钮的id、class或文本),替换代码中对应的定位路径即可。

完整修正代码示例

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

def automate_website():
    chromedriver_path = "你的chromedriver本地路径"
    service = Service(chromedriver_path)
    driver = webdriver.Chrome(service=service)
    
    driver.get("https://www.business.qld.gov.au/industries/mining-energy-water/water/bores-and-groundwater/bore-reports")
    
    # 显式等待搜索框加载完成,避免元素未渲染导致报错
    wait = WebDriverWait(driver, 10)
    search_box = wait.until(EC.presence_of_element_located((By.XPATH, "//input[@id='text' and @class='form-control form-group']")))
    
    # 示例:循环处理目标数值列表
    target_numbers = [1001, 2002, 3003]
    for num in target_numbers:
        # 输入数字
        search_box.send_keys(str(num))
        # 找到提交按钮并点击(需替换为页面实际按钮的定位器)
        submit_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@type='submit']")))
        submit_btn.click()
        # 可选:等待搜索结果加载完成后再清空
        # wait.until(EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'search-results')]")))
        # 清空搜索栏
        search_box.clear()
    
    driver.quit()

automate_website()

额外提示

  • 加入WebDriverWait显式等待,能大幅降低页面未加载完成就操作元素的报错概率。
  • 提交按钮的定位器需要你自行通过网页检查工具确认,比如查看按钮的id属性、class属性或显示文本,确保定位准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:38:15