selenium执行js并绕过webdriver监测常见方法

作者:Jeff的技术栈 时间:2023-07-04 06:58:15 

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()

来源:https://www.cnblogs.com/guyouyin123/p/13717391.html

标签:selenium,js,webdriver,绕过监测
0
投稿

猜你喜欢

  • asp如何验证信用卡是否可用?

    2010-06-10 18:39:00
  • 定位?浮动?自适应?

    2008-06-30 14:20:00
  • 关于web标准的思考

    2008-10-05 10:07:00
  • 用asp编写文档搜索页面

    2008-01-13 07:04:00
  • "模板化"——限制还是激发

    2009-03-26 11:36:00
  • 如何在社区建立一个寻呼台?

    2009-11-08 18:59:00
  • 在ASP中使用SQL语句之6:存储过程查询

    2007-08-11 12:44:00
  • 关于JS中变量的显式申明和隐式申明

    2008-09-12 13:04:00
  • 通过优化CSS代码 减小对系统资源的占用

    2010-08-03 12:33:00
  • SQL Join的一些总结(实例)

    2012-08-21 10:19:29
  • PHP之深入学习Yii2缓存Cache组件详细讲解

    2023-06-29 17:37:20
  • 由浅到深了解JavaScript类

    2008-06-16 13:20:00
  • 用实例分析如何整理SQL Server输入数据

    2009-01-20 15:16:00
  • 如何获取机器的网络配置属性?

    2009-11-23 20:44:00
  • asp访google分页代码

    2009-07-10 13:06:00
  • Web 标准设计实践:Google 的首页

    2008-10-12 12:14:00
  • asp查询xml的代码 不刷新页面查询的方法

    2011-04-06 11:00:00
  • 61条面向对象设计的经验原则

    2008-05-08 13:05:00
  • asp如何做一个看他爱不爱你的小测验?

    2010-07-11 21:16:00
  • CSS代码实现下划线样式的输入框效果

    2010-03-16 12:42:00
  • asp之家 网络编程 m.aspxhome.com