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

Selenium无法加载动态数据:服务费用字段抓取失败求助

问题解决方案与原理讲解

问题诊断

你的代码存在三个核心问题导致无法获取目标元素:

  1. User-Agent配置失效:先初始化了ChromeDriver,再添加UA参数,随后又重新创建未携带配置的Driver实例,导致自定义UA完全没生效,网站可能识别出这是爬虫环境。
  2. 等待策略不匹配动态加载场景:仅等待document.readyState = complete只能确保初始DOM加载完成,但服务费用这类数据是通过异步请求(AJAX/Fetch)加载的,此时目标元素还未渲染到页面中。
  3. 未启用反爬规避工具:导入了undetected_chromedriver但未实际使用,普通ChromeDriver的特征(如window.navigator.webdriver标记)很容易被网站反爬机制识别拦截。

修复后的代码

import sys
sys.path.append('/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages')
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import undetected_chromedriver as uc

listingurl = "https://www.bayut.com/property/details-10040631.html"
my_user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"

# 配置Chrome选项,先设置参数再初始化Driver
chrome_options = uc.ChromeOptions()
chrome_options.add_argument(f"--user-agent={my_user_agent}")

# 使用undetected_chromedriver启动浏览器,规避反爬检测
driver = uc.Chrome(options=chrome_options)

driver.get(listingurl)

# 等待目标元素可见,超时时间设为20秒(根据网络情况调整)
try:
    servcharge_element = WebDriverWait(driver, 20).until(
        EC.visibility_of_element_located((By.CSS_SELECTOR, '[aria-label="Service charges"]'))
    )
    # 获取元素文本内容
    servcharge_text = servcharge_element.text
    print(f"服务费用: {servcharge_text}")
except Exception as e:
    print(f"获取元素失败: {str(e)}")
finally:
    driver.quit()

技术原理讲解

  1. User-Agent的作用:网站通过User-Agent识别访问客户端的类型(浏览器、爬虫、APP等)。使用真实浏览器的UA可以让你的请求更接近普通用户访问行为,降低被反爬机制拦截的概率。
  2. 动态内容等待策略:异步加载的数据不会在初始DOM加载时就存在,必须等待目标元素的可见性或存在性。WebDriverWait结合EC.visibility_of_element_located可以确保元素不仅存在于DOM中,还处于可见状态,避免因元素未渲染完成导致的查找失败。
  3. undetected_chromedriver的反爬逻辑:普通ChromeDriver会在浏览器中留下window.navigator.webdriver = true的标记,网站可以通过这个特征识别爬虫。undetected_chromedriver会修改ChromeDriver的二进制文件和启动参数,隐藏这个标记,同时规避其他常见的爬虫检测手段,让浏览器环境更接近真实用户的浏览器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:23:14