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

使用Selenium ChromeDriver定位网页链接元素失败问题求解

错误原因

你之前使用的find_element_by_partial_link_text()方法的匹配对象是<a>标签的可见文本内容,而非href属性的取值,你提供的页面结构中目标a标签没有可见文本,自然无法匹配成功。而find_element_by_class_name()失败大概率是因为该元素的class为动态生成的随机值,页面刷新后会变化,不适合作为定位依据。

正确定位方案

推荐以下2种稳定的定位方式:

1. 通过专属测试属性定位(最稳定)

页面给目标a标签设置了专门用于测试的data-testid属性,值固定不会轻易变化,用CSS选择器定位即可:

# 旧版Selenium写法
button = browser.find_element_by_css_selector('a[data-testid="vehicle-card-link-box"]')

# 新版Selenium(v4.0+)推荐写法
from selenium.webdriver.common.by import By
button = browser.find_element(By.CSS_SELECTOR, 'a[data-testid="vehicle-card-link-box"]')

2. 通过href属性模糊匹配

如果你需要匹配所有href包含/us/en/car-rental/的a标签,用属性包含匹配语法:

# 旧版写法
button = browser.find_element_by_css_selector('a[href*="/us/en/car-rental/"]')

# 新版写法
button = browser.find_element(By.CSS_SELECTOR, 'a[href*="/us/en/car-rental/"]')

优化建议

不推荐使用固定时长的time.sleep()等待页面加载,容易受网络波动影响,建议改用Selenium的显式等待,元素加载完成就立即执行后续操作,更稳定高效:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome(r'PATH\chromedriver.exe')
browser.get('https://turo.com/us/en/search?country=US&defaultZoomLevel=11&delivery=false&endDate=09%2F25%2F2021&endTime=10%3A00&international=true&isMapSearch=false&itemsPerPage=200&latitude=40.735657&location=newark%2C%20nj&locationType=City&longitude=-74.1723667&maximumDistanceInMiles=50&region=NJ&sortType=RELEVANCE&startDate=09%2F22%2F2021&startTime=10%3A00')

# 最多等待10秒,直到目标元素可点击
wait = WebDriverWait(browser, 10)
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'a[data-testid="vehicle-card-link-box"]')))
button.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:54:01