selenium怎样避免被服务器检测

  selenium是用来完成浏览器自动化相关的操作.可以通过代码的形式制定一些基于浏览器自动化的相关操作(行为动作),当代码执行后,浏览器就会自动触发相关的事件.但这并不能避免服务器的检测.当在浏览器中打开开发者工具输入window.navigator.webdriver时会显示true,说明被服务器检测到了,通常情况下会显示undefined.下面我们就通过对selenium进行设置,避免被检测.

from selenium import webdriver
from selenium.webdriver import ChromeOptions

option = ChromeOptions()     #实例化一个ChromeOptions对象
option.add_experimental_option('excludeSwitches', ['enable-automation'])  #以键值对的形式加入参数

bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=option)  #在调用浏览器驱动时传入option参数就能实现undefined

  以上操作只适用于比较老的Google版本,最新的版本上述操作已经失效,新版可以尝试下边的操作(只适用于88之前的版本):

driver = webdriver.Chrome()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
      """
    })

   对于火狐浏览器可以尝试一下内容:

profile = webdriver.FirefoxProfile()
profile.set_preference("dom.webdriver.enabled", False)
driver = webdriver.Firefox(firefox_profile=profile)

  上边如果都没效果,下边使用通用方法: 注意一定要在driver.get(url)之后执行

driver.execute_script("Object.defineProperties(navigator,{webdriver:{get:()=>undefined}})")

  

 

posted @ 2019-05-06 21:02  屁桃  阅读(5665)  评论(9编辑  收藏  举报