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

如何使用Selenium爬取网页数据 解决dastelefonbuch.de抓取报错问题

报错原因
  • 元素查找方法使用错误:driver.find_element_by_xpath("//div[@class='vcard']") 返回的是单个WebElement对象,不支持for循环遍历,执行到循环语句会直接抛出类型错误。
  • 子元素Xpath语法错误:在item下查找子元素时以//开头的Xpath会从整个页面根节点匹配元素,只会反复返回页面第一个符合条件的内容,无法获取当前vcard对应的子元素数据。
  • 元素属性获取逻辑错误:i[@class='icon icon_url'] 是图标标签,本身没有text文本内容,直接取text只会返回空值,实际网址存储在该标签父级a标签的href属性中。
  • 缺少页面加载等待逻辑:页面资源加载存在延迟,未等待元素渲染完成就执行查找操作,大概率会抛出NoSuchElementException报错。
  • 语法适配问题:Selenium 4.0+版本已经废弃find_element_by_xpath这类旧写法,继续使用会触发警告甚至报错。
解决方法

修正后的完整代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By

PATH = r"C:\Program Files (x86)\chromedriver.exe"
url = 'https://www.dastelefonbuch.de/Suche/Zahnarzt'
driver = webdriver.Chrome(PATH)
# 设置全局隐式等待10秒,等待元素渲染完成再执行查找
driver.implicitly_wait(10)
driver.get(url)

# 改用复数查找方法获取所有vcard元素列表,适配Selenium4+的标准写法
v_cards = driver.find_elements(By.XPATH, "//div[@class='vcard']")
for item in v_cards:
    # 子元素xpath加.前缀,限定从当前item节点开始查找
    title = item.find_element(By.XPATH, ".//div[@class='name']").text
    phone = item.find_element(By.XPATH, ".//span[@class='nr']").text
    # 取图标父级a标签的href属性获取网站地址
    website = item.find_element(By.XPATH, ".//i[@class='icon icon_url']/parent::a").get_attribute('href')
    print(title, phone, website)

# 爬取完成后关闭驱动释放资源
driver.quit()

如果遇到反爬验证拦截,可以在初始化ChromeDriver时添加UA伪装、无头模式等配置绕过基础检测。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:06:03