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
相关产品推荐
相关产品推荐

