selenium进阶之参数篇

进阶技巧

  1. 设定options与chrome_options

    chromeOptions 是一个配置 chrome 启动时属性的类

    位于# .\Lib\site-packages\selenium\webdriver\chrome\options.py

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >class Options(object):
    def __init__(self):
    # 设置 chrome 二进制文件位置
    self._binary_location = ''
    # 添加启动参数
    self._arguments = []
    # 添加扩展应用
    self._extension_files = []
    self._extensions = []
    # 添加实验性质的设置参数
    self._experimental_options = {}
    # 设置调试器地址
    self._debugger_address = None
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # 无可视化界面
    chrome_options=Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')

    # 规避检测
    options=ChromeOptions()
    options.add_experimental_option('excludeSwitches',['enable-automation'])

    # 防止自动关闭浏览器
    options.add_experimental_option("detach", True)

    # 去掉“正在受到自动化测试软件的控制”
    optiosn.add_experimental_option('useAutomationExtension', False)

    # 设置user-agent
    options.add_argument('user-agent=xxx')

    # 设置无用户名密码认证的代理ip
    options.add_argument('--proxy-server=http://ip:port')

    # 禁止图片加载,提升爬取速度
    prefs = {"profile.managed_default_content_settings.images": 2}
    options.add_experimental_option("prefs", prefs)


    driver = webdriver.Chrome(chrome_options=chrome_options,options=options)
  2. 利用fake_useragent

    1
    2
    3
    4
    5
    from fake_useragent import UserAgent

    headers = {
    ‘User-Agent’: UserAgent().random,
    }
  3. 防止浏览器检测出selenium

    F12,选择Console,输入window.navigator.webdriver

    • 如果我们是正常打开的浏览器,则应该显示undefinedfalse
    • 而如果是通过selenium打开的浏览器,则会显示true

    这是因为selenium在运行的时候会暴露出一些预定义的Javascript变量(特征字符串),例如window.navigator.webdriver

    1
    2
    3
    4
    5
    6
    7
    8
    chrome = webdriver.Chrome(chrome_options=option)
    chrome.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
    Object.defineProperty(navigator, 'webdriver', {
    get: () => undefined
    })
    """
    })

    这段代码帮助selenium将window.navigator.webdriver字段定义成undefined

    另外也可以通过CDP(cdp命令是chrome支持的一种基于websocket的协议)来修改User-Agent

    1
    2
    chrome.execute_cdp_cmd('Network.setUserAgentOverride', {
    "userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'})

    更多避免检测方法详见:https://stackoverflow.com/questions/33225947/can-a-website-detect-when-you-are-using-selenium-with-chromedriver

  4. 未完待续…

本教程仅供学习,若被他人用于其他用途,与本人无关

不要打赏,只求关注呀QAQ