Python selenium绕过webdriver监测执行javascript


Posted in Python onApril 12, 2022

selenium执行js

优点:直接调用浏览器的环境
障碍:绕过selenium监测
原理:
# 执行js代码
bro.execute_script('js代码')

常见的selenium监测手段

正常登录 window.navigator.webdriver == undefined
自动化的 window.navigator.webdriver == true


除此之外,还有一些其它的标志性字符串(不同的浏览器可能会有所不同),常见的特征串如下所示:
webdriver  
__driver_evaluate  
__webdriver_evaluate  
__selenium_evaluate  
__fxdriver_evaluate  
__driver_unwrapped  
__webdriver_unwrapped  
__selenium_unwrapped  
__fxdriver_unwrapped  
_Selenium_IDE_Recorder  
_selenium  
calledSelenium  
_WEBDRIVER_ELEM_CACHE  
ChromeDriverw  
driver-evaluate  
webdriver-evaluate  
selenium-evaluate  
webdriverCommand  
webdriver-evaluate-response  
__webdriverFunc  
__webdriver_script_fn  
__$webdriverAsyncExecutor  
__lastWatirAlert  
__lastWatirConfirm  
__lastWatirPrompt  
$chrome_asyncScriptInfo  
$cdc_asdjflasutopfhvcZLmcfl_  
了解了这个特点之后,就可以在浏览器客户端JS中通过检测这些特征串来判断当前是否使用了selenium,并将检测结果附加到后续请求之中,这样服务端就能识别并拦截后续的请求。

常用绕过selenium监测1

正常登录 window.navigator.webdriver == undefined
自动化的 window.navigator.webdriver == true

from selenium import webdriver
options = webdriver.ChromeOptions()
# 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
options.add_experimental_option('excludeSwitches', ['enable-automation'])
#停止加载图片
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
browser = webdriver.Chrome(options=options)
browser.get('https://www.taobao.com/')

常用绕过selenium监测2

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('debuggerAddress','127.0.0.1:9222')
browser=webdriver.Chrome(executable_path=r'C:\Users\TR\AppData\Local\Google\Chrome
\Application\chromedriver.exe',chrome_options=chrome_options)
browser.get('http://www.zhihu.com')

终端输入如下指令:chrome.exe --remote-debugging-port=9222 --user-data-dir=“D:\cdsf”(需要谷歌驱动在系统环境变量下,然后再运行程序)
remote-debugging-port是你代码中指定的端口debuggerAddress;executable_path是你谷歌驱动位置;user-data-dir随便指定一个目录就行

常用绕过selenium监测3

1.使用chrome的远程调试模式结合selenium来遥控chrome进行抓取,这样不会携带指纹信息

步骤:

- 使用调试模式手工启动chrome,进入chrome的安装路径,例如chrome装在 C:\program\google\chrome.exe下
- 进入chrome安装路径
- 执行命令:
#注意端口不要被占用,防火墙要关闭,user-data-dir用来指明配置文件的路径
   chrome.exe --remote-debugging-port=9222 --user-data-dir="指向任意空文件夹"


2.启动完·之后新建python文件
运行代码:
import requests
from selenium import webdriver

chrome_options = "C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe"
chrome_options  = webdriver.ChromeOptions()
chrome_options.add_experimental_option('debuggerAddress','10.8.13.95:9222')
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get("https://www.zhihu.com/signup?next=%2F")

# chrome.exe --remote-debugging-port=9222 --user-data-dir="D:\moni"
这样监测的就不是selenium模拟了

常用绕过selenium监测4

def selenium(js):
    option = webdriver.ChromeOptions()
    # option.add_argument('--headless')
    option.add_experimental_option('useAutomationExtension', False)
    option.add_experimental_option('excludeSwitches', ['enable-automation'])
    bro = webdriver.Chrome(executable_path='./chromedriver', options=option)  # 弹出浏览器,要给浏览器驱动的地址
     # 打开页面优先执行的js,execute_cdp_cmd
    bro.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
            Object.defineProperty(navigator, 'webdriver', {
              get: () => undefined
            })
          """
    })

    bro.implicitly_wait(10)
    bro.get('https://www.toutiao.com/')
    time.sleep(5)
    print(bro.page_source)  # 获取页面返回的html代码
    bro.execute_script(js)
    input()

以上就是selenium执行js并绕过webdriver监测常见方法的详细内容!

Python 相关文章推荐
跟老齐学Python之类的细节
Oct 13 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
利用python实现AR教程
Nov 20 Python
使用Python实现Wake On Lan远程开机功能
Jan 22 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
Apr 29 Python
如何在Windows中安装多个python解释器
Jun 16 Python
django 模型字段设置默认值代码
Jul 15 Python
如何通过一篇文章了解Python中的生成器
Apr 02 Python
Pillow图像处理库安装及使用
Apr 12 #Python
Python各协议下socket黏包问题原理
Apr 12 #Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 #Python
分享Python异步爬取知乎热榜
尝试使用Python爬取城市租房信息
Apr 12 #Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 #Python
Python实现批量将文件复制到新的目录中再修改名称
You might like
Terran兵种对照表
2020/03/14 星际争霸
PHP开发微信支付的代码分享
2014/05/25 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
调试代码导致IE出错的避免方法
2014/04/04 Javascript
JavaScript声明变量时为什么要加var关键字
2014/09/29 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
实现jquery放大镜的两种方法
2018/02/22 jQuery
React 组件间的通信示例
2018/06/14 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
查看django版本的方法分享
2018/05/14 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
梅西百货澳大利亚:Macy’s Australia
2017/07/26 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
网络方面基础面试题
2012/11/16 面试题
大学生个人总结的自我评价
2013/10/05 职场文书
高中生自我鉴定范文
2013/10/30 职场文书
夜不归宿检讨书
2014/02/25 职场文书
《乞巧》教学反思
2014/02/27 职场文书
初中毕业生感言
2015/07/31 职场文书
高中信息技术教学反思
2016/02/16 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android