selenium 检测解决方法

正常网页用代码window.navigator.webdriver在console检测会返回false或undefined,但是在selenium中在selenium中会出现True
解决办法分成两种,一种是老版本的chrom使用的方法,一种是新版本的chrom使用的方法
老版本方法

from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path='./chromedriver')
driver.get("https://taobao.com")
driver.close()

新版本方法

from selenium import webdriver
driver = webdriver.Chrome()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})
driver.get('http://exercise.kingname.info')
driver.close()

因为有时候自己写的是新版本,服务器使用的是老版本chrom,所以我们可以合并在一起使用

from selenium import webdriver

# 为了防止你不确定自己的 chrom 版本,最好两个混合用
options = webdriver.ChromeOptions()
# chrom在79版之前用这个
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# 这个是更改 user-agent 的,可有可无
options.add_argument(
    "user-agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)")
driver = webdriver.Chrome(options=options)
# chrom在79版之后用这个
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})
driver.get('https://baidu.com')

time.sleep(30)
# 这里最好用代码关闭selenium不然的话你的进程里会残留大量的chrom进程
driver.close()

推荐阅读更多精彩内容