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

为何我的Selenium代码无法通过XPath获取网页文本值?

Selenium通过XPath获取TripAdvisor餐厅名称失败的原因

情况说明

我使用以下Selenium代码可成功通过XPath从TripAdvisor网页中获取餐厅名称并写入CSV文件:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

with open('restaurants.csv', 'w', encoding='utf-8') as file:
    file.write('name \n')

driver = webdriver.Chrome()
driver.get('https://www.tripadvisor.co.nz/Restaurants-g1811027-Auckland_North_Island.html')
time.sleep(3)

names = driver.find_elements(By.XPATH, "//div[@class='biGQs _P fiohW alXOW NwcxK GzNcM ytVPx UTQMg RnEEZ ngXxk']/a")

with open('restaurants.csv', 'a', encoding='utf-8') as file:
    for name in names:
        file.write(name.text + '\n')
file.close
driver.quit()

但我编写的原始代码却无法通过XPath获取文本值,原始代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

with open('restaurants.csv', 'w', encoding='utf-8') as file:
    file.write('name \n')

driver = webdriver.Chrome()
driver.get('https://www.tripadvisor.co.nz/Restaurants-g1811027-Auckland_North_Island.html')
time.sleep(3)

name  = driver.find_elements(By.XPATH,"//div[@class='biGQs _P fiohW alXOW NwcxK GzNcM ytVPx UTQMg RnEEZ ngXxk']/a")

with open('restaurants.csv', 'a', encoding='utf-8') as file:
    for i in range(len(name)):
        file.write(name.text +'\n')
file.close
driver.quit 

错误原因分析

  • 元素列表调用text属性错误:driver.find_elements()返回的是一个元素列表(name变量),你在循环里写name.text是对整个列表调用text属性,而不是列表中的单个元素。正确应该是name[i].text,或者直接像成功代码那样遍历列表中的每个元素。
  • 方法调用遗漏括号:driver.quit和file.close都没有加括号,这两个是方法,必须加括号才能执行(driver.quit()、file.close())。不过因为你用了with语句管理文件,file.close()其实可以省略,with会自动关闭文件。
  • 变量命名混淆:把元素列表命名为name(单数)容易混淆,建议改成复数names,和成功代码保持一致,避免逻辑上的误解。

修正后的代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

with open('restaurants.csv', 'w', encoding='utf-8') as file:
    file.write('name \n')

driver = webdriver.Chrome()
driver.get('https://www.tripadvisor.co.nz/Restaurants-g1811027-Auckland_North_Island.html')
time.sleep(3)

names = driver.find_elements(By.XPATH,"//div[@class='biGQs _P fiohW alXOW NwcxK GzNcM ytVPx UTQMg RnEEZ ngXxk']/a")

with open('restaurants.csv', 'a', encoding='utf-8') as file:
    # 方式1:直接遍历元素(推荐)
    for name in names:
        file.write(name.text + '\n')
    # 方式2:索引遍历写法
    # for i in range(len(names)):
    #     file.write(names[i].text + '\n')

driver.quit()  # 必须加括号执行方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:33:21