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算法学习之计数排序实例
Dec 18 Python
python基础教程之对象和类的实际运用
Aug 29 Python
python之wxPython应用实例
Sep 28 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
Python中顺序表的实现简单代码分享
Jan 09 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
python操作链表的示例代码
Sep 27 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
python实现神经网络感知器算法
2017/12/20 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
解决python 自动安装缺少模块的问题
2018/10/22 Python
python可视化text()函数使用详解
2020/02/11 Python
旅游管理毕业生自荐信
2013/11/05 职场文书
客户表扬信范文
2014/01/10 职场文书
自我鉴定总结
2014/03/24 职场文书
个人合作协议书范本
2014/04/18 职场文书
安全环保演讲稿
2014/08/28 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书