使用Python Selenium爬取法国网站leboncoin.fr时持续遭遇验证码拦截的解决方案咨询
解决leboncoin.fr验证码拦截的方案
我完全懂这种反复被验证码卡着的挫败感——leboncoin的反爬机制确实挺严格的,尤其是对自动化工具的检测。你试过的基础Selenium伪装只是第一步,咱们可以从几个方向优化,或者换用更隐蔽的工具:
一、强化Selenium的用户伪装与行为模拟
你现有的ChromeOptions设置还不够全面,加上这些参数能大幅降低被识别为爬虫的概率,同时模拟真实用户的操作节奏:
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 import random options = webdriver.ChromeOptions() # 基础伪装 options.add_argument("start-maximized") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) # 新增关键伪装参数 options.add_argument("--disable-blink-features=AutomationControlled") # 禁用自动化检测标志 options.add_argument(f"user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{random.randint(90, 110)}.0.0.0 Safari/537.36") # 随机生成UA options.add_argument("--disable-dev-shm-usage") options.add_argument("--no-sandbox") options.add_argument("--disable-gpu") driver = webdriver.Chrome(options=options) # 模拟真实用户的缓慢操作流程 driver.get('https://www.leboncoin.fr/') time.sleep(random.uniform(2, 5)) # 随机停顿2-5秒,模拟浏览 # 滚动页面 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(random.uniform(1, 3)) # 尝试点击一个无关元素(比如页脚链接)增加真实感 try: footer_link = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "footer a")) ) footer_link.click() time.sleep(random.uniform(2, 4)) driver.back() except Exception as e: print(f"模拟点击失败: {e}")
二、使用住宅代理IP
单一IP频繁访问很容易被leboncoin标记为异常流量,建议使用法国地区的住宅代理(住宅代理的IP来自真实用户设备,比数据中心代理更难被检测)。每次请求切换不同的IP,同时确保代理的延迟低,避免触发反爬机制。
三、换用Playwright替代Selenium
Playwright是微软推出的自动化工具,默认的伪装性比Selenium好很多,它会自动模拟真实浏览器的行为,不容易被检测到。简单示例:
from playwright.sync_api import sync_playwright import random import time with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 创建浏览器上下文,自定义UA context = browser.new_context( user_agent=f"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{random.randint(90, 110)}.0.0.0 Safari/537.36" ) page = context.new_page() page.goto("https://www.leboncoin.fr/") time.sleep(random.uniform(2, 5)) # 模拟滚动 page.evaluate("window.scrollTo(0, document.body.scrollHeight);") time.sleep(random.uniform(1, 3)) # 后续爬取操作... browser.close()
四、利用已登录的Cookie
手动在浏览器中登录leboncoin并完成一次验证码验证后,保存浏览器的Cookie,之后在爬虫中加载这些Cookie,模拟已登录状态,能大幅减少验证码的触发频率:
import json # 第一步:手动登录后,保存Cookie到文件 # driver = webdriver.Chrome(options=options) # driver.get('https://www.leboncoin.fr/') # # 手动完成登录和验证码验证 # cookies = driver.get_cookies() # with open("leboncoin_cookies.json", "w") as f: # json.dump(cookies, f) # 第二步:爬虫加载Cookie driver.get('https://www.leboncoin.fr/') with open("leboncoin_cookies.json", "r") as f: cookies = json.load(f) for cookie in cookies: driver.add_cookie(cookie) driver.refresh() # 刷新后即可保持登录状态
五、合规提示
最后要提醒你:爬取leboncoin前一定要仔细阅读它的服务条款和robots.txt,避免爬取受保护的数据或超出合理范围的请求,否则可能面临法律风险。
内容的提问来源于stack exchange,提问作者Thirsty
相关产品推荐
相关产品推荐

