使用Selenium提取网页含`scheda`超链接遇到问题求助
问题原因及解决方案
问题1:仅返回单个超链接
你当前使用的find_element_by_xpath()是单元素匹配方法,只会返回匹配到的第一个节点,要获取所有符合条件的超链接,需要使用多元素匹配方法find_elements_by_xpath()(注意结尾多了s),Selenium 4.0+ 版本推荐使用统一的find_elements()语法传入定位类型参数。
问题2:无法提取到内容的常见原因
- 上下文匹配错误:你写的XPath前缀
.表示相对当前调用查找方法的元素的子节点,如果直接用driver.find_elements调用,.等价于根路径,和不加没有区别;如果你要从前面已经定位到的main元素的子节点中查找,应该用main.find_elements()来调用方法 - 链接无可见文本:很多带
scheda的超链接可能是图片链接,本身没有innerText,你调用.text自然返回空,可以先提取href属性确认是否匹配到了目标元素 - 元素未完全加载:你当前只等待了
p1元素加载完成,其内部的超链接节点可能还未渲染完成,可以调整等待条件为等待所有符合条件的a标签加载完成
修正后可运行代码
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from pathlib import Path from selenium import webdriver website = 'https://www.abitareco.it/nuove-costruzioni-milano.html' path = Path().joinpath('util', 'chromedriver') driver = webdriver.Chrome(path) driver.get(website) # 等待p1元素加载完成 main = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.NAME, "p1"))) # 等待main下所有含scheda的a标签加载完成,直接获取所有匹配元素 scheda_links = WebDriverWait(main, 10).until(EC.presence_of_all_elements_located((By.XPATH, './/a[contains(@href, "scheda")]'))) # 遍历输出所有链接的href和文本 for link in scheda_links: print("链接地址:", link.get_attribute('href')) print("链接文本:", link.text.strip() if link.text.strip() else "无可见文本") print("---")
额外注意事项
- 如果你使用的是Selenium 4.6+版本,不需要手动配置chromedriver路径,Selenium会自动匹配对应版本的驱动,直接写
driver = webdriver.Chrome()即可 - 如果需要提取的是整个页面所有含
scheda的超链接,不需要限定在main元素下,把XPath的前缀.去掉即可
内容的提问来源于stack exchange,提问作者Akmal Soliev
相关产品推荐
相关产品推荐

