从XPath获取文本值

0 投票
1 回答
27 浏览
提问于 2025-04-14 15:28

我为什么需要用这段代码来从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)

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 

谢谢 :)

1 个回答

0

问题不在于XPath,而是在于你访问namenames变量的方式。

在你那段不工作的代码中,你使用了

for i in range(len(name)):

但你从来没有提到过i。应该是

for i in range(len(name)):
    file.write(name[i].text +'\n')
                   ^^^

我觉得你最近的代码更容易阅读和理解。

你应该花点时间去看看关于循环的内容,了解一下它们之间的区别,具体可以参考文档

撰写回答