终极攻略!如何彻底防止Selenium被检测!

在使用Selenium进行爬虫时,许多朋友都会遇到各种反爬措施。

实际上,在绝大多数情况下,网站轻而易举地能够检测出你正在使用WebDriver而非标准浏览器。

本文将详细介绍如何有效防止检测的方法。

在一篇公众号文章《别去送死了。Selenium 与 Puppeteer 能被网站探测的几十个特征》中,我们知道目前网上的反检测方法几乎都是掩耳盗铃,因为模拟浏览器有几十个特征可以被检测,仅仅隐藏 webdriver 这一个值是没有任何意义的。

今天我们就来说说应该如何正确解决这个问题。我们首先给出解决方案。然后再说明这个解决方案,我是通过什么方式找到的。

解决这个问题的关键,就是一个 js 文件,叫做stealth.min.js。这个文件的获取有点复杂,具体可以搜索一下,这里不详细介绍。

我们需要设定,让 Selenium在打开任何页面之前,先运行这个 Js 文件。
就可以避免被检测到。

论证过程如下:

首先,我们直接在浏览器输入网址访问这个网站:
https://bot.sannysoft.com/
这些选项其实就是浏览器的特征
在这里插入图片描述
但我们如果使用selenium就会得到不一样的结果,如下:
代码:

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

chrome_options = Options()
chrome_options.add_argument("--headless")

driver = Chrome(executable_path='./chromedriver', options=chrome_options)
driver.get('https://bot.sannysoft.com/')
driver.save_screenshot('screenshot.png')

结果如下:
在这里插入图片描述
下面我们加载这个js文件后再来访问这个网站,查看特征值:

代码:

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

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')

driver = Chrome(executable_path='./chromedriver', options=chrome_options)

with open('./stealth.min.js') as f:
    js = f.read()

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": js
})

driver.get('https://bot.sannysoft.com/')
time.sleep(5)
driver.save_screenshot('walkaround.png')

source = driver.page_source
with open('result.html', 'w') as f:
    f.write(source)

结果:
在这里插入图片描述
我们可以发现结果与第一种情况一模一样

js文件获取方式,公众号编程启航回复selenium反检测

更多宝藏

🍇🍉🍊🍏🍋🍅🥝🥥🫒🫕🥗
视频推送看这里🤤:
https://space.bilibili.com/1909782963
项目仓库看这里🤗:
https://github.com/w-x-x-w
https://gitee.com/w-_-x
公众号名称😮:编程启航
博客文章看这里🤭:
https://blog.csdn.net/weixin_62650212

### 使用 Spring Boot、Vue 和 NUIApp 构建旅游管理系统的开发教程 #### 项目概述 构建一个基于 Spring Boot 后端框架和 Vue 前端框架的旅游管理系统,可以实现用户注册登录、景点信息展示、订单处理等功能。NUIApp 是一种用于快速开发移动应用的技术栈,在此背景下可作为移动端解决方案的一部分。 #### 技术选型 - **后端**: Spring Boot 提供 RESTful API 接口服务[^1]。 - **前端**: Vue.js 实现单页面应用程序(SPA),并与 Element UI 组件库配合提升用户体验。 - **移动端**: 虽然提到 NUIApp, 不过更常见的是使用 Weex 或者其他跨平台技术来适配手机和平板设备;如果确实要采用 NUIApp,则需额外关注其文档和支持情况。 #### 项目结构示例 以下是典型的前后端分离架构下的文件夹布局: ```plaintext tourism-management-system/ ├── backend/ # Spring Boot 应用所在目录 │ ├── src/main/java/com/example/demo/ │ │ └── controller # 控制器层代码位置 │ ├── resources # 配置文件和其他资源存放处 │ └── ... └── frontend/ # Vue CLI 创建的应用根路径 ├── public # 公共静态资产放置区 ├── src # 源码主要部分 │ ├── assets # 图片等素材保存在此 │ ├── components # 可重用组件定义地点 │ ├── views # 页面视图逻辑编写区域 │ └── App.vue # 主程序入口文件之一 └── package.json # npm/yarn 执行依赖清单描述符 ``` #### 示例功能模块设计 为了更好地理解如何集成这三个工具链工作,这里给出几个核心业务场景的具体实现思路: - 用户认证授权机制可以通过 `spring-security-oauth2` 来完成安全控制; - 对于景区数据管理和查询操作,建议利用 MyBatis Plus 进行数据库交互优化; - 订单创建流程则可能涉及到分布式事务协调问题,此时 Seata 分布式事务中间件会是一个不错的选择。 #### 获取源码方式 由于具体到 "Spring Boot + Vue + NUIApp" 的组合相对少见,特别是加入了 NUIApp 后,公开可用的例子较少见。对于想要获取完整的案例学习而言,可以从以下几个方面入手: - 查找开源社区贡献的相关仓库链接,比如 GitHub 上搜索相似关键词找到匹配度较高的项目; - 如果有特定需求定制化程度较高的话,考虑购买商业书籍如《Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统》中或许能找到灵感; - 加入专业技术论坛交流群组询问前辈们的经验分享也是不错的途径。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python斗罗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值