首页 > 解决方案 > Tripadvisor 中使用 Selenium (xpath) 抓取的问题

问题描述

我是 python 和抓取的新手。我正在尝试提取有关 Tripadvisor 的信息。首先,我需要 Selenium 进行爬行,但是当我在不同时间运行程序时,路径会发生变化。

我给你看一个例子:

import urllib.request
import urllib.parse
from selenium import webdriver
import csv
from selenium.webdriver.common.action_chains import ActionChains
import time
from _datetime import datetime
from selenium.webdriver.common.keys import Keys
options=webdriver.ChromeOptions()
options.headless=False
prefs={"profile.default_content_setting_values.notofications" :2}
options.add_experimental_option("prefs",prefs)
chromedriver = "C:/Users/rober/OneDrive/Escritorio/tfm/chromedriver.exe"
driver=webdriver.Chrome(chromedriver)
driver.maximize_window()
time.sleep(5)

driver.get("https://www.tripadvisor.es/")
//*[@id="component_5"]/div/div/div/span[3]/div/div/div/a/span[2]

#Click Restaurants
driver.find_element_by_xpath('//*[@id="component_5"]/div/div/div/span[3]/div/div/div/a').click()

#Introduce localization
driver.find_element_by_xpath('//*[@id="BODY_BLOCK_JQUERY_REFLOW"]/div[14]/div/div/div[1]/div[1]/div/input').send_keys("madrid")

在代码的最后部分,有时 div[14] 是 div[13] 或 div[15]。是否可以使用绝对 xpath 或使用其他形式?

谢谢

标签: pythonseleniumxpath

解决方案


您不应该使用具有较长路径的 Xpath。这使测试变得脆弱

请使用较短的 xpath。像这样的 Xpath "//input[@class="Smftgery"]" 应该可以帮助您单击相同的输入字段。

在此处输入图像描述

也可以点击 Restaurantes,您可以使用//*[text()='Restaurantes']


推荐阅读