news 2026/4/30 0:54:21

别再被网站识别成机器人了!用Python的undetected_chromedriver+Selenium实现完美隐身爬虫

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再被网站识别成机器人了!用Python的undetected_chromedriver+Selenium实现完美隐身爬虫

突破反爬封锁:Python隐身爬虫实战指南

当你在电商网站抓取商品信息时,是否经常遇到"请验证您不是机器人"的提示?传统的Selenium方案越来越容易被识别,而undetected_chromedriver正是为解决这一问题而生。这个基于Chromium内核的Python库,能让你像真实用户一样浏览网页,完美避开Cloudflare等反爬系统的检测。

1. 为什么需要undetected_chromedriver?

现代网站的反爬机制已经进化到能识别常规自动化工具的程度。普通Selenium驱动的浏览器会暴露一系列自动化特征,比如:

  • navigator.webdriver属性返回true
  • 存在特定的WebDriver扩展
  • 浏览器指纹异常
  • 鼠标移动轨迹过于规律

undetected_chromedriver通过以下方式解决这些问题:

from undetected_chromedriver import Chrome driver = Chrome() driver.get('https://example.com') print(driver.execute_script("return navigator.webdriver")) # 返回undefined而非true

关键改进点包括:

  • 自动匹配Chrome和Chromedriver版本
  • 移除所有自动化特征标志
  • 模拟人类操作模式
  • 支持headless模式下的反检测

2. 环境配置与基础使用

2.1 安装准备

首先确保系统已安装Python 3.7+和最新版Chrome浏览器,然后安装必要库:

pip install undetected-chromedriver selenium

版本兼容性参考表:

Chrome版本undetected_chromedriver版本Selenium版本
110+3.5.0+4.8.0+
90-1093.4.04.0.0+
<902.4.03.141.0

2.2 基础配置示例

import undetected_chromedriver as uc options = uc.ChromeOptions() options.add_argument('--disable-blink-features=AutomationControlled') options.add_argument('--user-agent=Mozilla/5.0...') driver = uc.Chrome( options=options, headless=False, use_subprocess=True )

提示:首次运行时会自动下载匹配的chromedriver,建议保持网络畅通

3. 高级反检测技巧

3.1 指纹伪装实战

浏览器指纹是反爬系统的重要识别依据,我们需要全方位伪装:

# 修改WebGL元数据 driver.execute_script(""" const getParameter = WebGLRenderingContext.getParameter; WebGLRenderingContext.prototype.getParameter = function(parameter) { if (parameter === 37445) return 'Intel Inc.'; // 伪装显卡厂商 return getParameter.call(this, parameter); }; """) # 修改屏幕分辨率特征 driver.execute_cdp_cmd( "Emulation.setDeviceMetricsOverride", { "width": 1920, "height": 1080, "deviceScaleFactor": 1, "mobile": False } )

3.2 行为模式模拟

人类操作具有随机性和不完美性,我们需要模拟这些特征:

from selenium.webdriver.common.action_chains import ActionChains import random import time element = driver.find_element('css selector', 'button.submit') # 模拟人类点击模式 actions = ActionChains(driver) actions.move_to_element_with_offset(element, random.uniform(1,5), random.uniform(1,5)) actions.pause(random.uniform(0.1, 0.3)) actions.click() actions.perform() # 随机滚动页面 driver.execute_script(f"window.scrollBy(0, {random.randint(200, 500)})") time.sleep(random.uniform(0.5, 2.0))

4. 电商数据抓取实战

以某电商平台为例,演示完整抓取流程:

def scrape_product(driver, url): driver.get(url) # 等待关键元素加载 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".product-title")) ) # 模拟浏览行为 scroll_randomly(driver) hover_random_elements(driver) # 提取商品信息 product = { 'title': driver.find_element(By.CSS_SELECTOR, '.product-title').text, 'price': driver.find_element(By.CSS_SELECTOR, '.price').text, 'rating': driver.find_element(By.CSS_SELECTOR, '.rating').get_attribute('aria-label'), 'reviews': [ {'user': el.find_element(By.CSS_SELECTOR, '.user').text, 'content': el.find_element(By.CSS_SELECTOR, '.content').text} for el in driver.find_elements(By.CSS_SELECTOR, '.review-item')[:5] ] } return product

关键优化点:

  • 使用随机延迟避免请求规律性
  • 添加鼠标移动轨迹干扰
  • 分阶段加载数据
  • 处理动态生成的评价内容

5. 性能优化与异常处理

5.1 资源管理策略

# 内存优化配置 options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') # 并发控制示例 from concurrent.futures import ThreadPoolExecutor def worker(url): driver = uc.Chrome(options=options) try: data = scrape_product(driver, url) return data finally: driver.quit() with ThreadPoolExecutor(max_workers=3) as executor: results = list(executor.map(worker, product_urls))

5.2 常见问题解决方案

  • Cloudflare验证挑战:添加--disable-blink-features=AutomationControlled参数
  • 指纹检测失败:定期更换UserAgent和屏幕分辨率参数
  • 内存泄漏:限制单实例运行时间,定期重启浏览器
  • 验证码出现:集成第三方打码服务或添加手动干预点

在实际项目中,我会为每个爬虫实例配置自动恢复机制,当检测到异常状态时自动重启并恢复进度。通过将浏览上下文保存到本地,即使进程中断也能从断点继续:

def save_context(driver, path): cookies = driver.get_cookies() local_storage = driver.execute_script("return JSON.stringify(localStorage);") with open(path, 'w') as f: json.dump({'cookies': cookies, 'storage': local_storage}, f) def load_context(driver, path): with open(path) as f: data = json.load(f) for cookie in data['cookies']: driver.add_cookie(cookie) driver.execute_script(f"Object.assign(localStorage, {data['storage']});")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 0:46:55

第105篇:实战:构建一个AI智能客服中台——打通全渠道,降本增效的秘诀(项目实战)

文章目录项目背景技术选型架构设计核心实现1. 混合检索式知识库的实现2. 基于Rasa的、可对接业务API的对话流踩坑记录效果对比项目背景 在上一家公司&#xff0c;我们团队负责的电商业务线&#xff0c;客服压力巨大。高峰期&#xff0c;用户咨询从App、小程序、官网、电话、社…

作者头像 李华
网站建设 2026/4/30 0:44:25

TVA在显示面板制造与检测中的实践与挑战(5)

重磅预告&#xff1a;本专栏将独家连载新书《AI视觉技术&#xff1a;从入门到进阶》精华内容。本书是《AI视觉技术&#xff1a;从进阶到专家》的权威前导篇&#xff0c;特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan师从美国三院院士、“AI教母”…

作者头像 李华
网站建设 2026/4/30 0:35:18

2026年如何部署Hermes/OpenClaw?京东云环境配置及token Plan步骤

2026年如何部署Hermes/OpenClaw&#xff1f;京东云环境配置及token Plan步骤。OpenClaw和Hermes Agent是什么&#xff1f;OpenClaw和Hermes Agent怎么部署&#xff1f;如何部署OpenClaw/Hermes Agent&#xff1f;2026年还在为部署OpenClaw和Hermes Agent到处找教程踩坑吗&#…

作者头像 李华