问题:“被网站检测出来是selenium,不让爬了”。

以下是报错及解决方案:

!!!文中出现的网站是一个有此检测的案例,仅供学习参考!!!

一、报错:

1.报错截图(记住这个 true 哈,间接地代表你是selenium;咱们正常F12这里都是 false 的哈):
2.报错截图对应的代码:

from selenium import webdriver
import timeclass Crawl_ZhuanLi(object):def __init__(self):chromeoption = webdriver.ChromeOptions()# chromeoption.add_argument('--headless')    # 无头浏览器chromeoption.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36')self.driver_path = './windows_chromedriver.exe'self.driver = webdriver.Chrome(self.driver_path, chrome_options=chromeoption)def get_value(self,url):self.driver.get(url)print("开始爬取...")time.sleep(60)Crawl_ZhuanLi().get_value(url='http://cpquery.cnipa.gov.cn/')

3.备注:

(1)driver_path 对应的chromedriver路径请自行填写,
(2)chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html;
(3)非爬虫操作时,我们在F12控制台输入window.navigator.webdriver时,显示的是false;

二、解决方案:

1.在driver.get(url)前加入如下代码:

        self.driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})

2.效果:

三、完整代码:

from selenium import webdriver
import timeclass Crawl_ZhuanLi(object):def __init__(self):chromeoption = webdriver.ChromeOptions()# chromeoption.add_argument('--headless')    # 无头浏览器chromeoption.add_argument('--no-sandbox')  # 解决linux DevToolsActivePort文件不存在的报错chromeoption.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36')self.driver_path = './windows_chromedriver.exe'self.driver = webdriver.Chrome(self.driver_path, chrome_options=chromeoption)def get_value(self,url):# 下面这行代码目的为:防止网站识别出是seleniumself.driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})self.driver.get(url)print("开始爬取...")time.sleep(60)Crawl_ZhuanLi().get_value(url='http://cpquery.cnipa.gov.cn/')

四、分析总结:

1.为什么我们进不了网站

待爬取网站运行自己的 JavaScript 代码,对我们(爬虫)发送过去的请求信息进行检测,然后发现我们是selenium后,把我们(爬虫)的请求禁掉了。
(比如待爬网站做了一个 window.navigator.webdriver 检测,发现你返回的是 true

2.解决思路

在待爬取的网站运行其自带的 JavaScript 代码前,先执行下我们的js代码,去隐藏或修改掉我们的window.navigator.webdriver信息

3.按照思路,如何解决

利用Chrome 开发工具协议( 简称CDP ),在 Selenium 中调用 CDP 的命令。

即:在使用selenium时,使用driver.execute_cdp_cmd命令,传入需要调用的 CDP 命令和参数,之后selenium会帮我们对Chrome的window.navigator.webdriver信息进行调整。

selenium会给定一段 JavaScript 代码,让 Chrome 刚打开页面,还没运行网站自带的 js 代码时,就先执行一个js,修改Chrome的window.navigator.webdriver

4.查找文档,逐个分析

(1)execute_cdp_cmd: selenium去执行CDP方法。
这里的英文逐字拼起来,我理解为:执行(execute),按照Chrome开发协议(CDP),在终端命令行(cmd)。
即:在Chrome浏览器控制台终端,按照其开发协议,执行XX命令。

(2)Page.addScriptToEvaluateOnNewDocument

从CDP 的官方文档,我们可以看到 Page.addScriptToEvaluateOnNewDocument 的作用是:在页面创建前(也是被爬页面的script加载前),先执行截图里的 javascript。
即:1.添加javascript; 2.在frame(页面)加载前;
(这里做过前端的可以参考下vue的生命周期,这里涉及了html的生命周期);

(3)

Object.defineProperty(navigator, 'webdriver', {get: () => undefined
})

作用:定义webdriver浏览器驱动的 navigator 的值为 undefined。

4.备注
(1)除了上述这个方法,还有别的方法解决此问题;
(2)仅较新版本的 Chrome+ChromeDriver 适用此方法,不兼容的话,可以考虑升级下,不过较老版本的Chrome,也有对应老版本的方法来解决此问题(不过老版本方法,不兼容新版本)。

五、参考资料:

1.CPD 的官方文档: https://chromedevtools.github.io/devtools-protocol/tot/Page#method-addScriptToEvaluateOnNewDocument

2.selenium官方文档:https://www.selenium.dev/selenium/docs/api/py/webdriver_chromium/selenium.webdriver.chromium.webdriver.html?highlight=execute_cdp_cmd#selenium.webdriver.chromium.webdriver.ChromiumDriver.execute_cdp_cmd

3.最初参考网站(感谢):
https://www.cnblogs.com/presleyren/p/12936553.html

解决方案:爬虫被反爬,检测出是selenium,报400,无法进入网站相关推荐

  1. 爬虫与反爬:一场无休止之战

    现实生活中,其实很多人都与爬虫"打过交道". 比如,逢年过节之时,为确保能买到回家火车票,有人会选择使用"抢票软件",这个软件就是利用网络爬虫来登录铁路售票网络 ...

  2. Python爬虫-2019年我破解了商标网数据爬虫-破解反爬技术那些事情

    Python爬虫-2019年我破解了商标网!数据爬虫-破解反爬技术那些事情 由于自己一直做Python大数据挖掘技术开发,最近有不少的朋友要做大数据分析,找我帮忙商标网的数据挖掘,实现爬取中国商标网全 ...

  3. python爬虫反爬-python爬虫--爬虫与反爬

    爬虫与反爬 爬虫:自动获取网站数据的程序,关键是批量的获取. 反爬虫:使用技术手段防止爬虫程序的方法 误伤:反爬技术将普通用户识别为爬虫,从而限制其访问,如果误伤过高,反爬效果再好也不能使用(例如封i ...

  4. 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图...

    第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-爬虫和反爬的对抗过程以及策略-scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...

  5. 16.网络爬虫—字体反爬(实战演示)

    网络爬虫-字体反爬 一·字体反爬原理 二·字体反爬模块Fonttools TTF文件 三·FontCreator 14.0.0.2790 FontCreatorPortable下载与安装 四·实战演示 ...

  6. python 下载文件 限速-Python网络爬虫---scrapy通用爬虫及反爬技巧

    一.通用爬虫 通用爬虫一般有以下通用特性:爬取大量(一般来说是无限)的网站而不是特定的一些网站. 不会将整个网站都爬取完毕,因为这十分不实际(或者说是不可能)完成的.相反,其会限制爬取的时间及数量. ...

  7. python爬虫常见反爬措施_爬虫常见的反爬措施有哪些

    爬虫常见的反爬措施有三种: 1.header头部信息 解决方法: 加User-Agent值: 如果不加header头,部分网站服务器判断不到用户的访问来源,所以会返回一个404错误来告知你是一个爬虫, ...

  8. 爬虫必备反爬技能:使用动态ip

    目录 一.为什么要使用动态代理ip? 二.如何申请动态代理ip? 三.如何使用动态ip? 一.为什么要使用动态代理ip? 使用它的好处在哪里呢? 保护你的网络免受外部攻击 屏蔽你的IP地址 限制不必要 ...

  9. Python爬虫技巧!网站有反爬?我们有selenium!

    Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 文章最后有免费的Python资料,获取方式,关注头条号,私信回复资料获取下载链 ...

最新文章

  1. Hibernate 统计记录总数方法汇总
  2. js前端和后台数据交互-----前端传字符串,后台控制器将其转化为集合
  3. redhat python3.4安装步骤
  4. mysql 查询一张表在另一张表中不存在的数据
  5. 只属于你我的共同记忆
  6. OpenGL基础35:帧缓冲(下)之简单图像处理
  7. 新颖性搜索(Novelty Search,NS)算法详解与实现
  8. python ipo模型是什么意思_IPO里的估值模型是什么情况?
  9. Win11本地安全策略怎么设置?
  10. Excel潜能系列——Excel游戏 2048
  11. ubuntu结束进程快捷键_ubuntu快捷键设置大全
  12. FAQ:The field file exceeds its maximum permitted size of 1048576 bytes.
  13. 华为ADS高阶自动驾驶视频和技术方案曝光!
  14. JS做的一款动感超酷banner
  15. python打开操作写入excel操作
  16. @Autowired作用在方法上
  17. 密码学入门(3):分组密码的模式
  18. “二老板”何以疯行互联网?
  19. 东大22春《计算机应用基础》在线平时作业3_100分参考非答案
  20. 转载 100本软件开发最佳书籍排行榜

热门文章

  1. 如何使用脚本编辑器为您的Google Apps增压
  2. 卡尔曼滤波算法的代码验证
  3. 【罗技】M590 鼠标驱动
  4. 服务器nvme硬盘识别不了,解决部分主板无法识别NVMe协议的固态硬盘问题
  5. html5英文参考文献,外文参考文献引用常识介绍
  6. 云计算演义(11)为什么阿里云不及格?
  7. 蓝桥杯刷题013——小猪存钱罐(并查集)
  8. Python3 Flask框架
  9. mysql教程我爱自学网_6个相见恨晚的自学网站,每个都是精品,送给正在努力拼搏的你们...
  10. php 已知概率抽奖,抽奖概率算法实现-用PHP来实现的