Python+Selenium网页爬取遇AttributeError:WebDriver无find_elements_by_xpath属性
问题解决:Selenium爬取表格的两个错误及代码修正
错误原因及修复方案
1. DeprecationWarning: executable_path已弃用
Selenium 4.x版本起,不再支持直接将驱动路径传入webdriver.Chrome(),必须通过Service对象来配置驱动路径。
修复方法:
- 导入
selenium.webdriver.chrome.service.Service类 - 创建
Service对象并传入驱动路径,再将其作为参数传给webdriver.Chrome() - 也可以使用
ChromeDriverManager自动下载管理驱动(推荐,避免手动维护驱动版本)
2. AttributeError: 'WebDriver' object has no attribute 'find_elements_by_xpath'
Selenium 4.x移除了find_elements_by_*系列方法,统一使用find_elements()结合By类来指定定位方式。
修复方法:
- 导入
selenium.webdriver.common.by.By类 - 将
driver.find_elements_by_xpath('xxx')替换为driver.find_elements(By.XPATH, 'xxx')
代码中其他问题
- XPath的索引从1开始,原代码中
td[0]无效,需改为td[1]对应第一列(Scheme),td[2]对应第二列(Benchmark) - 循环变量
riskometer未定义,需改为scheme或benchmark的长度 - 元素列表不能直接调用
.text,需遍历每个元素单独获取文本
修正后的完整代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By import pandas as pd # 方法1:手动指定驱动路径 service = Service('C:\webdrivers\chromedriver.exe') driver = webdriver.Chrome(service=service) # 方法2:使用ChromeDriverManager自动管理驱动(需先安装:pip install webdriver-manager) # from webdriver_manager.chrome import ChromeDriverManager # driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get('https://www.mutualfundssahihai.com/en/schemeperformance') driver.maximize_window() # 修正XPath索引,改用By.XPATH定位 scheme_elements = driver.find_elements(By.XPATH, '//tbody/tr/td[1]') benchmark_elements = driver.find_elements(By.XPATH, '//tbody/tr/td[2]') result = [] # 遍历元素列表,获取每个元素的文本 for i in range(len(scheme_elements)): temporary_data = { 'Scheme': scheme_elements[i].text, 'Benchmark': benchmark_elements[i].text } result.append(temporary_data) df_data = pd.DataFrame(result) df_data.to_excel('scrapingresult.xlsx', index=False) # 记得关闭驱动 driver.quit()
内容的提问来源于stack exchange,提问作者Rajat Kapoor
相关产品推荐
相关产品推荐

