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

Selenium爬取Idealista时按钮无法点击问题求助

解决Idealista网站Selenium点击搜索按钮失败的问题

我之前爬Idealista的时候也踩过一模一样的坑,它的反爬机制确实严格,你遇到的问题本质是自动化行为被检测+元素交互时机不对导致的。直接用固定sleep+原生xpath点击很容易触发拦截,下面给你几个一步步的解决方案:


1. 替换固定等待为智能等待,确保元素完全就绪

time.sleep()是最不可靠的等待方式,网站加载速度波动会导致元素还没准备好就执行点击。改用WebDriverWait等待元素处于可交互状态:

首先导入必要模块:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

然后把原脚本的点击逻辑替换成:

# 等待初始按钮可点击并点击
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, initial_button))).click()

# 等待搜索框可输入并填值
search_box = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, search_field)))
search_box.send_keys(test)

# 等待查询按钮可点击并点击
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, valoration))).click()

2. 模拟人类点击行为,降低被检测概率

Idealista会监测鼠标移动、点击的行为模式,用ActionChains模拟先 hover 再点击的动作,更接近真人操作:

导入模块:

from selenium.webdriver.common.action_chains import ActionChains

修改查询按钮的点击代码:

valoration_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, valoration)))
# 先移动到按钮上,停留0.5秒再点击
ActionChains(driver).move_to_element(valoration_btn).pause(0.5).click(valoration_btn).perform()

3. 配置ChromeDriver,隐藏自动化特征

默认的ChromeDriver会被网站识别为机器人,给浏览器添加几个关键参数来绕过检测:

修改浏览器初始化代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 禁用自动化控制提示
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
# 添加真实用户代理(可以换成你自己浏览器的UA)
chrome_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')
# 可选:禁用图片加载,加快页面加载速度
chrome_options.add_argument('--blink-settings=imagesEnabled=false')

chromedriver_location = "/home/dell/Downloads/chromedriver"
driver = webdriver.Chrome(chromedriver_location, options=chrome_options)

4. 兜底方案:用JavaScript直接点击

如果上面的方法都不行,直接通过JavaScript执行点击操作——这种方式不受元素可见性或交互状态的限制(注意:此方法更容易被反爬检测到,尽量作为最后手段):

valoration_btn = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, valoration)))
driver.execute_script("arguments[0].click();", valoration_btn)

整合后的完整脚本

把上面的优化点整合起来,最终脚本如下:

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains

# 配置Chrome选项
chrome_options = Options()
chrome_options.add_argument('--disable-blink-features=AutomationControlled')
chrome_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')

chromedriver_location = "/home/dell/Downloads/chromedriver"
driver = webdriver.Chrome(chromedriver_location, options=chrome_options)
driver.get('https://www.idealista.com/valoraciones-inmuebles')

test = '7559431DG0075N0001EY'
initial_button = '//*[@id="vendorlead"]/div[2]/a'
search_field = '//*[@id="search-by-reference"]'
valoration = '//*[@id="vendorlead"]/button'

# 点击初始按钮
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, initial_button))).click()

# 输入查询内容
search_box = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, search_field)))
search_box.send_keys(test)

# 模拟人类点击查询按钮
valoration_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, valoration)))
ActionChains(driver).move_to_element(valoration_btn).pause(0.5).click(valoration_btn).perform()

# 如果上面的点击失败,尝试JS点击(注释掉上面一行,打开下面两行)
# valoration_btn = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, valoration)))
# driver.execute_script("arguments[0].click();", valoration_btn)

额外提醒:如果频繁请求,Idealista可能会触发验证码或IP封禁,建议搭配代理IP使用,避免账号或IP被封。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:57:30