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

Selenium无法定位全部匹配元素,返回结果数量不稳定求助

解决方案

1. 更换稳定的元素定位器

你之前使用的XPath依赖固定DOM层级,页面结构稍有调整就会失效。建议换成基于卡片特征的定位方式,直接匹配公寓卡片内的详情链接:

# 示例:匹配cards容器下所有卡片内的详情链接(可根据实际页面class微调)
links_list = driver.find_elements(By.XPATH, '//div[@id="cards"]//div[contains(@class, "card")]//a[contains(@href, "nadlan")]')

可以通过F12开发者工具验证定位器:在Console标签输入$x('你的XPath表达式'),查看返回的元素是否符合预期。

2. 处理滚动加载(核心问题)

该网站采用滚动加载更多公寓卡片的机制,静态等待30秒只能加载初始可见区域的内容,需模拟滚动直到所有内容加载完成:

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
import time

driver = webdriver.Chrome(executable_path="C:\\Users\\user\\Documents\\לימודים\\python\\selenium-project\\Driver\\chromedriver.exe")
driver.get("https://www.ad.co.il/nadlansale?sp3=30&sp1=1,82,41,103,28,101,110")
driver.maximize_window()

# 循环滚动直到没有新内容加载
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待新内容加载
    time.sleep(3)
    # 对比滚动高度,判断是否加载完成
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

# 等待所有链接元素可见后再提取
try:
    links_list = WebDriverWait(driver, 20).until(
        EC.visibility_of_all_elements_located((By.XPATH, '//div[@id="cards"]//div[contains(@class, "card")]//a'))
    )
    # 提取所有href属性
    apartment_hrefs = [link.get_attribute('href') for link in links_list]
    print(f"共获取到 {len(apartment_hrefs)} 个公寓链接")
finally:
    driver.quit()

3. 规避反爬检测

部分网站会识别Selenium的自动化特征,导致内容加载异常,可添加Chrome启动参数规避:

from selenium.webdriver.chrome.options import Options

options = Options()
# 禁用自动化标识检测
options.add_argument("--disable-blink-features=AutomationControlled")
# 设置正常浏览器UA
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")

driver = webdriver.Chrome(
    executable_path="C:\\Users\\user\\Documents\\לימודים\\python\\selenium-project\\Driver\\chromedriver.exe",
    options=options
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:25:24