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中的装饰器详解
Apr 13 Python
详解python里使用正则表达式的全匹配功能
Oct 19 Python
Python机器学习logistic回归代码解析
Jan 17 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
python wxpython 实现界面跳转功能
Dec 17 Python
python几种常用功能实现代码实例
Dec 25 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
python Matplotlib模块的使用
Sep 16 Python
Python利用matplotlib绘制折线图的新手教程
Nov 05 Python
Python爬虫框架之Scrapy中Spider的用法
Jun 28 Python
virtualenv隔离Python环境的问题解析
Jun 21 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生成静态页面的简单示例
2014/04/17 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
2015/11/02 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
python实现自主查询实时天气
2018/06/22 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
2020/01/02 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
市场营销专业毕业生自荐信
2013/11/02 职场文书
后备干部考察材料
2014/02/12 职场文书
初三班主任寄语大全
2014/04/04 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
运动会通讯稿300字
2015/07/20 职场文书
医院病假条怎么写
2015/08/17 职场文书
python字典的元素访问实例详解
2021/07/21 Python
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
用Python可视化新冠疫情数据
2022/01/18 Python