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

使用Selenium提取网页含`scheda`超链接遇到问题求助

问题原因及解决方案

问题1:仅返回单个超链接

你当前使用的find_element_by_xpath()是单元素匹配方法,只会返回匹配到的第一个节点,要获取所有符合条件的超链接,需要使用多元素匹配方法find_elements_by_xpath()(注意结尾多了s),Selenium 4.0+ 版本推荐使用统一的find_elements()语法传入定位类型参数。

问题2:无法提取到内容的常见原因

  1. 上下文匹配错误:你写的XPath前缀.表示相对当前调用查找方法的元素的子节点,如果直接用driver.find_elements调用,.等价于根路径,和不加没有区别;如果你要从前面已经定位到的main元素的子节点中查找,应该用main.find_elements()来调用方法
  2. 链接无可见文本:很多带scheda的超链接可能是图片链接,本身没有innerText,你调用.text自然返回空,可以先提取href属性确认是否匹配到了目标元素
  3. 元素未完全加载:你当前只等待了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 04:18:01