selenium 启动时会遇到哪些坑

1、chrome 正受到自动测试软件的控制

提示:

图片

解决办法:

网上有教程是禁用浏览器的 infobars 选项来取消这个提示,经过测试这个方法已经失效了。

option.add_argument('disable-infobars')

但是有另一种方式是可以成功隐藏提示框的。

from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_experimental_option('useAutomationExtension', False)
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = webdriver.Chrome(options=option)

2、浏览器提示 windows defender 防护

提示:

图片

解决办法:

重新配置用户数据目录可以解决:

option.add_argument('user-data-dir=/usr/you/data/dir')
driver = webdriver.Chrome(options=option)

3、浏览器驱动版本不匹配

提示:

"selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 81"

解决办法:

下载和浏览器兼容的驱动版本。chrome 浏览器比较稳定的驱动版本有 71 和 38,优先使用这两个版本的驱动,然后再使用和浏览器版本一致的驱动版本。另外,firefox 火狐浏览器的驱动更加稳定,可以多用火狐浏览器运行 ui 自动化。

4、找不到浏览器安装路径

提示:

WebDriverException: unknown error: cannot find Chrome binary
(Driver info: chromedriver=2.26.436362
(5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 10.0.14393 x86_64)

解决办法:

options = ChromeOptions()
options.binary_location = "C:\\Program Files\\Chrome\\chrome64_55.0.2883.75\\chrome.exe"
driver = webdriver.Chrome(options=options)

5、浏览器驱动没有放在环境变量

提示:

图片

解决方法1:

把驱动放在任意位置,添加 executable_path 参数。 使用 windows 系统时,只能放在 c 盘,其他盘会继续报错。

driver_path = r'C:\data\chromedriver_71.exe'
driver = webdriver.Chrome(executable_path=driver_path)

解决方法2:

使用 python 自动配置 path 变量

driver_path = r'C:\data'
os.environ['path'] += f";{driver_path}"
driver = webdriver.Chrome()

6、session 创建失败

提示:

Session created failed

解决办法:

options = ChromeOptions()
options.add_argument("enable-automation")
options.add_argument("--headless")
options.add_argument("--window-size=1920,1080")
options.add_argument("--no-sandbox")
options.add_argument("--disable-extensions")
options.add_argument("--dns-prefetch-disable")
options.add_argument("--disable-gpu")
driver = webdriver.Chrome(options=options)

7、汇总后的浏览器设置

import os
from selenium import webdriver
def start_selenium(driver_path, user_dir, browser_path):
    options = webdriver.ChromeOptions()
    
    # hide info bar
    options.add_experimental_option('useAutomationExtension', False)
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    
    # change browser user data dir
    options.add_argument(f'user-data-dir={user_dir}')
    
    # browser binary location
    options.binary_location = browser_path
    
    # insert web driver path into os path variable
    os.environ['path'] += f";{driver_path}"
    
    # others
    options.add_argument("enable-automation")
    options.add_argument("--headless")
    options.add_argument("--window-size=1920,1080")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-extensions")
    options.add_argument("--dns-prefetch-disable")
    options.add_argument("--disable-gpu")
    
    driver = webdriver.Chrome(options=options)