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

使用Selenium爬取Zillow遭遇PX Captcha的解决方法问询

Zillow爬取时PX Captcha验证无法通过的解决方法

问题描述

我正在开展一个基于Selenium的项目,目标是访问Zillow网站获取出租房源的链接、价格和地址等信息。我的代码如下:

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

driver = webdriver.Chrome(executable_path=CHROME_DRIVER_PATH)

driver.get(ZILLOW_HOUSES_URL)

house_links = driver.find_elements(By.CSS_SELECTOR, LINKS_CSS_SELECTOR)
prices = driver.find_elements(By.CSS_SELECTOR, PRICES_CSS_SELECTOR)
addresses = driver.find_elements(By.CSS_SELECTOR, ADDRESSES_CSS_SELECTOR)

for link in house_links:
    print(link.get_attribute('href'))
for price in prices:
    print(price.text.split('+')[0].split(', ')[0].split('/')[0])
for address in addresses:
    print(address.text)

但运行代码时,多数情况下进入Zillow网页后会出现PX Captcha验证。我长按完成验证后,页面仍会显示‘Try Again’要求重试,多次尝试均无法通过,请问该如何解决这个问题?

可行解决方案

  • 伪装浏览器指纹:Selenium默认的自动化特征极易被识别,通过ChromeOptions配置消除自动化标识:
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    # 禁用自动化提示条
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    # 设置真实浏览器的User-Agent
    options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
    # 启用图片加载,避免无图模式被标记
    options.add_argument("--enable-images")
    # 禁用沙箱模式,避免环境异常被识别
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--no-sandbox")
    
    driver = webdriver.Chrome(options=options, executable_path=CHROME_DRIVER_PATH)
    # 移除navigator.webdriver标识
    driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
    
  • 模拟真实用户交互节奏:避免页面加载完成后立即爬取,加入随机延迟和滚动操作:
    import time
    import random
    
    driver.get(ZILLOW_HOUSES_URL)
    # 随机等待2-5秒,模拟用户等待页面加载
    time.sleep(random.uniform(2, 5))
    # 模拟滚动浏览行为
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2)")
    time.sleep(random.uniform(1, 3))
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    time.sleep(random.uniform(1, 3))
    
  • 切换代理IP:若当前IP因频繁访问被风控,添加代理IP更换访问源:
    # 在ChromeOptions中配置代理
    options.add_argument('--proxy-server=http://your-proxy-ip:port')
    
  • 优先使用官方API:通过Zillow官方提供的API接口获取数据,这是合规且无验证码风险的方案,能直接拿到结构化的房源信息。
  • 持久化验证后的Cookie:手动通过验证后,保存当前Cookie,后续请求时加载Cookie跳过验证:
    import pickle
    
    # 保存Cookie到本地文件
    with open('zillow_cookies.pkl', 'wb') as f:
        pickle.dump(driver.get_cookies(), f)
    # 后续加载Cookie
    driver.get(ZILLOW_HOUSES_URL)
    with open('zillow_cookies.pkl', 'rb') as f:
        cookies = pickle.load(f)
    for cookie in cookies:
        driver.add_cookie(cookie)
    driver.refresh()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:45:44