使用selenium进行自动化的时候,如csdn登录时可能会遇到检测反爬,从而需要验证

      1. 反爬
  有时候,我们利用 Selenium 自动化爬取某些网站时,极有可能会遭遇反爬。
  实际上,我们使用默认的方式初始化 WebDriver 打开一个网站,下面这段 JS 代码永远为 true,而手动打开目标网站的话,则为:undefined。
      # 通过这段 JS 脚本区分是爬虫还是人工操作
  window.navigator.webdriver
     

稍微有一点反爬经验的工程师利用上面的差别,很容易判断访问对象是否为一个爬虫,然后对其做反爬处理,返回一堆脏数据或各种验证码。

       如果要实现后面的自动化操作,首先要解决的就是这个反爬的问题。
  常见的反反爬方案包含:设置参数?excludeSwitches、mitmproxy 拦截过滤、cdp 命令,下面分别来说说。
  
      2.设置参数 excludeSwitches
  Chrome79 之前可以通过配置 ChromeOptions 驱动参数,来达到反反爬的目的。
  只需要将参数打开,设置 excludeSwitches 值为 enable-automation 即可。

   from selenium.webdriver import Chrome
  from selenium.webdriver import ChromeOptions
  option = ChromeOptions()
  # 打开参数
  option.add_experimental_option('excludeSwitches',?['enable-automation'])
  driver = Chrome(options=option)
  driver.implicitly_wait(10)
  driver.get("http://www.google.com")
       这个参数是实验性参数,所以右上角会提示:请停用开发者模式运行的扩展程序,不能点击停用。
  这样,设置这个参数后:
  window.navigator.webdriver 的值就变成 undefined 了。
  
      3. mitproxy 拦截
  众所周知,mitproxy 可以拦截到网络请求,做其他处理,这里只需要进行 JS 代码注入即可。
 # 待执行的 JS 代码,修改 window.navigator.webdriver 的值
 js_exec = 'Object.defineProperties(navigator,{webdriver:{get:() => false}});'
 # 重写 response,截获网络请求,js注入
def response(slef,flow: mitmproxy.http.HTTPFlow):
   if 'google' in flow.request.url:
   flow.response.text = js_exec + flow.response.text
  然后启动 mitmdump:
# 启动mitmproxy
  mitmdump -p 8888 -s 111.py
  最后,配置 ChromeOptions 指向 mitmdump代码即可。
  # 配置ChromeOptions
  option.add_argument("--proxy-server=http://127.0.0.1:8888")
  4. cdp 命令(经验证可以)
  cdp 全称是:Chrome Devtools-Protocol
  通过 addScriptToEvaluateOnNewDocument()?方法可以在页面还未加载之前,运行一段脚本。
  如此,我们只需要提前设置:
  window.navigator.webdriver?的值为 undefined 即可。
  

   from selenium.webdriver import Chrome
  from selenium.webdriver import ChromeOptions
  option = ChromeOptions()
  # 打开参数
  # option.add_argument("--proxy-server=http://127.0.0.1:8888")
  # driver = Chrome(options=option)
  driver = Chrome()
  driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
   "source": """
   Object.defineProperty(navigator, 'webdriver', {
   get: () => undefined
   })
   """
  })
  driver.implicitly_wait(10)
  driver.get("http://www.google.com")
  5. 其他
  通过上面的 3 种方法可以很好的解决 Selenium 自动化被反爬的问题。
      不过,一般自动化测试不会遇到反爬问题。

使用selemium被反爬解决方法的更多相关文章

  1. python反爬虫解决方法——模拟浏览器上网

    之前第一次练习爬虫的时候看网上的代码有些会设置headers,然后后面的东西我又看不懂,今天终于知道了原来这东西是用来模拟浏览器上网用的,因为有些网站会设置反爬虫机制,所以如果要获取内容的话,需要使用 ...

  2. Python | 常见的反爬及解决方法,值得收藏

    我们都知道Python用来爬数据,为了不让自家的数据被别人随意的爬走,你知道怎么反爬吗?今天播妞带着大家一起见识见识常见的反爬技术. 很多人学习python,不知道从何学起.很多人学习python,掌 ...

  3. Python3爬取起猫眼电影实时票房信息,解决文字反爬~~~附源代码

    上文解决了起点中文网部分数字反爬的信息,详细链接https://www.cnblogs.com/aby321/p/10214123.html 本文研究另一种文字反爬的机制——猫眼电影实时票房反爬 虽然 ...

  4. k 近邻算法解决字体反爬手段|效果非常好

    字体反爬,是一种利用 CSS 特性和浏览器渲染规则实现的反爬虫手段.其高明之处在于,就算借助(Selenium 套件.Puppeteer 和 Splash)等渲染工具也无法拿到真实的文字内容. 这种反 ...

  5. python干货:5种反扒机制的解决方法

    前言 反爬虫是网站为了维护自己的核心安全而采取的抑制爬虫的手段,反爬虫的手段有很多种,一般情况下除了百度等网站,反扒机制会常常更新以外.为了保持网站运行的高效,网站采取的反扒机制并不是太多,今天分享几 ...

  6. sharepoint2013用场管理员进行文档库的爬网提示"没有权限,拒绝"的解决方法

    爬网提示被拒绝,场管理员明明可以打开那个站点的,我初步怀疑是:环回请求(LoopbackRequest)导致的 解决方法就是修改环回问题.修改注册表 具体操作方法: http://www.c-shar ...

  7. java爬虫爬取的html内容中空格( )变为问号“?”的解决方法

    用java编写的爬虫,使用xpath爬取内容后,发现网页源码中的 全部显示为?(问号),但是使用字符串的replace("?", ""),并不能替换,网上找了一 ...

  8. Python爬虫实战——反爬机制的解决策略【阿里】

    这一次呢,让我们来试一下"CSDN热门文章的抓取". 话不多说,让我们直接进入CSND官网. (其实是因为我被阿里的反爬磨到没脾气,不想说话--) 一.URL分析 输入" ...

  9. Python3爬取起点中文网阅读量信息,解决文字反爬~~~附源代码

    起点中文网,在“数字”上设置了文字反爬,使用了自定义的文字文件ttf通过浏览器的“检查”显示的是“□”,但是可以在网页源代码中找到映射后的数字正则爬的是网页源代码,xpath是默认utf-8解析网页数 ...

  10. Scrapy———反爬蟲的一些基本應對方法

    1. IP地址驗證 背景:有些網站會使用IP地址驗證進行反爬蟲處理,檢查客戶端的IP地址,若同一個IP地址頻繁訪問,則會判斷該客戶端是爬蟲程序. 解決方案: 1. 讓Scrapy不斷隨機更換代理服務器 ...

随机推荐

  1. react 基础知识

    基础知识 css-module react 将js转为vdom,react-dom将vdom转为dom // 外面一层是一个动态值,里面的表示的是对象 <img src={logo} style ...

  2. Linux 查询 磁盘空间 系统报错:No space left on device

    报这个错误是磁盘空间不足导致的 使用   du -h -d 1 / | sort -nr 这个命令 一级一级排查

  3. docker持久化数据存储

    一.把数据存储到本地/opt/data目录下面,容器挂载到/data目录下面 [root@docker-1 ~]# docker run -itd --name www -v /opt/data:/d ...

  4. Chtholly Tree 学习笔记

    前言 珂朵莉树 (Chtholly Tree) 是一种简单优美的数据结构,就像 Chtholly 一样可爱.暴力即优美. 适用于一些有区间赋值操作的序列操作题. Chtholly Tree 的本质是把 ...

  5. CF513F2 题解

    题意 传送门 有 \(a+b+1\) 个会动的棋子,在一个大小为 \(n\times m\) 的棋盘上,棋盘上有一些点有障碍.棋子中,有 \(a\) 个红色棋子,\(b\) 个蓝色棋子,和 \(1\) ...

  6. Python中用requests处理cookies的3种方法

    在接口测试中,大多数项目的接口是需要登录后进行操作的,经常用到requests库进行模拟登录及登录后的操作,下面是我不断踩坑后总结出来的关于登录凭证cookies的3种操作方法. 一. 用 reque ...

  7. TCP协议之三次握手(二)

    本节主要研究三次握手出现的一些异常情况和编程相关的知识: 上一节分析了三次握手的过程,本节会回答一些三次握手的小问题,然后利用linux系统调用实践一下简单的网络的编程. 三次握手的常见问题 Q 向一 ...

  8. Software--电商平台系统--P2 支撑基础设施 Infrastructure

    2018-01-11  18:19:49 架构 客户体验 Ajax 交互技术. 网站快速加载且响应灵敏,则应该缓存商品数据. 灵活的缓存机制,以支持任何类型的存储(即分布式存储或内存中存储). 日志功 ...

  9. Git commit时提示错误时 解决办法

    问题描述: * Please tell me who you are.  Run  git config –global user.email "you@example.com"  ...

  10. 【python】绘图,颜色,线型

    颜色 最好用的:在网站上找到对应使用十六进制RGB/RGBA字符串表示颜色 可以看颜色及其对应色号名称:https://xkcd.com/color/rgb/ 参考:matplotlib指定绘图颜色的 ...