当前位置: 首页 > news >正文

【Python】保持Selenium稳定爬取的方法(防检测策略)

selenium 防检测策略的方法汇总:

  1. 合理设置延迟:请求间添加随机延迟 (2-10秒)

  2. 限制爬取频率:控制每小时/每天的请求量

  3. 轮换用户代理:准备至少10个不同的User-Agent

  4. 使用住宅代理:优先选择高质量的住宅代理IP

  5. 处理验证码:集成2Captcha或Anti-Captcha服务

  6. 定期更新工具:保持selenium和浏览器驱动最新版本

1. 基础防检测配置

from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsdef get_stealth_driver():options = Options()# 基本防检测设置options.add_argument("--disable-blink-features=AutomationControlled")options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option("useAutomationExtension", False)# 禁用自动化控制标志options.add_argument("--disable-infobars")options.add_argument("--disable-dev-shm-usage")options.add_argument("--no-sandbox")# 随机用户代理user_agents = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64)...","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)..."]import randomoptions.add_argument(f"user-agent={random.choice(user_agents)}")driver = webdriver.Chrome(options=options)# 修改navigator.webdriver属性driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})return driver

2. 高级防检测技术

2.1 使用 undetected-chromedriver

import undetected_chromedriver as ucdef get_undetected_driver():options = uc.ChromeOptions()# 配置选项options.add_argument("--disable-popup-blocking")options.add_argument("--disable-notifications")# 随机窗口大小import randomwidth = random.randint(1000, 1400)height = random.randint(700, 900)options.add_argument(f"--window-size={width},{height}")driver = uc.Chrome(options=options,version_main=114,  # 匹配你的Chrome版本headless=False,use_subprocess=True)return driver

2.2 模拟人类行为模式

from selenium.webdriver.common.action_chains import ActionChains
import time
import randomdef human_like_behavior(driver, element=None):"""模拟人类操作行为"""actions = ActionChains(driver)# 随机鼠标移动if element:actions.move_to_element(element)else:x = random.randint(0, 500)y = random.randint(0, 500)actions.move_by_offset(x, y)# 随机延迟time.sleep(random.uniform(0.5, 2.5))# 随机滚动scroll_amount = random.randint(200, 800)driver.execute_script(f"window.scrollBy(0, {scroll_amount})")time.sleep(random.uniform(0.3, 1.8))actions.perform()

3. 完整防检测爬取流程

def stealth_scrape(url):try:# 使用undetected-chromedriverdriver = get_undetected_driver()# 访问目标URLdriver.get(url)# 随机等待time.sleep(random.uniform(2, 5))# 模拟人类浏览行为human_like_behavior(driver)# 执行实际爬取操作# 示例:获取页面标题title = driver.titleprint(f"成功获取页面标题: {title}")# 更多爬取逻辑...except Exception as e:print(f"爬取过程中发生错误: {str(e)}")finally:driver.quit()
# 使用示例
stealth_scrape("https://example.com")

4. 额外防护措施

4.1 代理IP轮换

proxies = ["123.45.67.89:8080","98.76.54.32:3128"
] #换成自己的def get_proxy_driver():options = uc.ChromeOptions()proxy = random.choice(proxies)options.add_argument(f"--proxy-server=http://{proxy}")return uc.Chrome(options=options)

4.2 指纹混淆

def modify_fingerprint(driver):# 修改屏幕分辨率driver.execute_script("Object.defineProperty(screen, 'width', {get: () => 1920});""Object.defineProperty(screen, 'height', {get: () => 1080});")# 修改时区driver.execute_cdp_cmd("Emulation.setTimezoneOverride",{"timezoneId": "America/New_York"})# 修改WebGL指纹driver.execute_script("const getParameter = WebGLRenderingContext.prototype.getParameter;""WebGLRenderingContext.prototype.getParameter = function(parameter) {""  if (parameter === 37445) { return 'NVIDIA Corporation'; }""  return getParameter.call(this, parameter);""};")

5. 检测与验证

def test_stealth(driver):test_urls = ["https://bot.sannysoft.com","https://arh.antoinevastel.com/bots/areyouheadless"]for url in test_urls:driver.get(url)time.sleep(3)driver.save_screenshot(f"stealth_test_{url.split('/')[-1]}.png")print(f"测试结果已保存: stealth_test_{url.split('/')[-1]}.png")
http://www.xdnf.cn/news/148501.html

相关文章:

  • C语言中操作字节的某一位
  • GoWASM、Kotlin(KT)、RustWASM 反编译难度对比
  • java网络原理3
  • 运维打铁:Mysql 分区监控以及管理
  • Lesar: 面向 Lustre/Scade 语言的形式化模型检测工具
  • @Transactional的一点理解
  • 【C语言】动态经典试题练习
  • 告别并发更新噩梦:MyBatis-Plus @Version 乐观锁实战指南
  • 深入详解人工智能数学基础——概率论中的马尔可夫链蒙特卡洛(MCMC)采样
  • CAPL编程_03
  • vue-lottie的使用和配置
  • 正大模型视角下的市场结构判断逻辑
  • 使用 SSE + WebFlux 推送日志信息到前端
  • 矫平机深度解析:操作实务、行业标准与智能化升级
  • 一款好的私有云产品推荐——优刻得私有云(UCloudStack Pro)产品白皮书
  • 示波器测试差分信号
  • cpu性能统计
  • 网络犯罪全球化,数字时代的跨国诈骗危机
  • Linux——线程(1)线程概念与控制
  • 12.thinkphp验证
  • 粒子群优化算法(Particle Swarm Optimization, PSO)的详细解读
  • PR第二课--混剪
  • 嵌入式通信技术实践与教学创新:从蓝牙协议到虚实融合的实验革命
  • 【Nacos-安全与限流机制健全06 】
  • 第19章:Multi-Agent多智能体系统介绍
  • C/C++时间函数详解及使用场景
  • 找出字符串中第一个匹配项的下标
  • 关于hbaseRegion和hbaseRowKey的一些处理
  • 在 Ubuntu 22.04|20.04|18.04 上安装 PostgreSQL 13
  • 4/24杂想