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 相关文章推荐
Django的URLconf中使用缺省视图参数的方法
Jul 18 Python
对于Python中RawString的理解介绍
Jul 07 Python
Python 实现一个颜色色值转换的小工具
Dec 06 Python
Python编程实现双击更新所有已安装python模块的方法
Jun 05 Python
python实现堆和索引堆的代码示例
Mar 19 Python
Python使用Pickle库实现读写序列操作示例
Jun 15 Python
Python WEB应用部署的实现方法
Jan 02 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
Python 脚本的三种执行方式小结
Dec 21 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
使用Keras构造简单的CNN网络实例
Jun 29 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
PHP实现计算器小功能
2020/08/28 PHP
这段js代码得节约你多少时间
2011/12/20 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
浅析AngularJs HTTP响应拦截器
2015/12/28 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
vue2.0 路由模式mode="history"的作用
2018/10/18 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python3生成随机数实例
2014/10/20 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
Python实现一个服务器监听多个客户端请求
2018/04/12 Python
Django如何配置mysql数据库
2018/05/04 Python
python程序输出无内容的解决方式
2020/04/09 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
重构Python代码的六个实例
2020/11/25 Python
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
网络维护中文求职信
2014/01/03 职场文书
心理健康活动总结
2014/04/30 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
教师学期个人总结
2015/02/11 职场文书
一个都不能少观后感
2015/06/04 职场文书
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
Python echarts实现数据可视化实例详解
2022/03/03 Python