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 相关文章推荐
从CentOS安装完成到生成词云python的实例
Dec 01 Python
Linux下python3.7.0安装教程
Jul 30 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
python3实现表白神器
Apr 09 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
python判断一个对象是否可迭代的例子
Jul 22 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
python自动点赞功能的实现思路
Feb 26 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
python查询MySQL将数据写入Excel
Oct 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
2017/05/30 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
2019/02/20 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
python查找目录下指定扩展名的文件实例
2015/04/01 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
Python ATM功能实现代码实例
2020/03/19 Python
自荐书格式
2013/12/01 职场文书
小区门卫岗位职责
2013/12/31 职场文书
顶岗实习计划书
2014/01/10 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
公司员工检讨书
2014/02/08 职场文书
刚毕业大学生自荐信范文
2014/02/20 职场文书
网络优化专员求职信
2014/05/04 职场文书
关于读书的活动方案
2014/08/14 职场文书
介绍信模板
2015/01/31 职场文书
2015年乡镇民政工作总结
2015/05/13 职场文书
2019年公司卫生管理制度样本
2019/08/21 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
python获取对象信息的实例详解
2021/07/07 Python