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 Trie树实现字典排序
Mar 28 Python
python用字典统计单词或汉字词个数示例
Apr 22 Python
Python实现比较两个列表(list)范围
Jun 12 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
Python实现的圆形绘制(画圆)示例
Jan 31 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
python list转矩阵的实例讲解
Aug 04 Python
Python中单线程、多线程和多进程的效率对比实验实例
May 14 Python
Python使用正则实现计算字符串算式
Dec 29 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 Python
python实现对doc、txt、xls等文档的读写操作
Apr 02 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
May 30 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
php调用mysql存储过程
2007/02/14 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
复选框全选与全不选操作实现思路
2013/08/18 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
JS交换变量的方法
2015/01/21 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
python继承和抽象类的实现方法
2015/01/14 Python
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
python实现对指定输入的字符串逆序输出的6种方法
2018/04/26 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
Python实现通过解析域名获取ip地址的方法分析
2019/05/17 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
详解Python 循环嵌套
2020/07/09 Python
如何利用python读取micaps文件详解
2020/10/18 Python
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
教师队伍管理制度
2014/01/14 职场文书
抄作业检讨书
2014/02/17 职场文书
2015年清明节活动总结
2015/02/09 职场文书
学习nginx基础知识
2021/09/04 Servers
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android