• selenium进阶设置


    1、无头浏览设置和规避爬虫检测

    问题一:有界面时可以展示的元素,无头模式报错element not interactable

    解决方法:通过错误截图发现,页面上有该元素,但是页面不够大,没有显示想定位的元素。

    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver import Chrome
    
    chrome_options = Options()
    chrome_options.add_argument("--headless")  # 设置无头浏览
    chrome_options.add_argument("--disable-gpu")  # 无头浏览,禁止调用gpu
    chrome_options.add_argument("--window-size=1920,1200")  # 无头浏览配置1080p分辨率,不然会报错
    chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36")
    chrome_options.add_experimental_option('useAutomationExtension', False)  # 防止检测
    chrome_options.add_argument("--mute-audio")  # 静音
    chrome_options.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])  # 防止检测、禁止打印日志
    chrome_options.add_argument('--disable-blink-features=AutomationControlled')
    chrome_options.add_argument('--ignore-certificate-errors')  # 忽略证书错误
    chrome_options.add_argument('--ignore-ssl-errors')  # 忽略ssl错误
    chrome_options.add_argument('–log-level=3')
    chrome_options.add_argument("--start-maximized")
    chrome_options.add_experimental_option("detach", True)
    browser = Chrome(options=chrome_options)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    2、多个chromedriver程序同时运行

    使用多进程,确保每个 chromedriver.exe 都能单独执行(多线程是不行的)

    from concurrent.futures import ThreadPoolExecutor  # 多线程
    from concurrent.futures import ProcessPoolExecutor # 多进程
    
    executor = ThreadPoolExecutor(5)  # 创建线程池执行器
    pool = ProcessPoolExecutor(5)  # 创建进程池执行器
    app = Flask(__name__)
    
    @app.route('/aut/wsla_api', methods=['post'])
    def wsla_api():
        form_data = request.get_json() # 接收的数据包,
        from flask_code.wsla_automation import zdls_start  # 要执行到函数
        # zdls_start为执行函数,form_data 为函数传的参数
        # executor.submit(zdls_start, form_data)  # 将程序放入进程池中
        pool.submit(zdls_start, form_data)  # 将程序放入进程池中
        return '成功'
    
    if __name__ == '__main__':
        BASE_DIR = os.path.dirname(os.path.abspath(__file__))
        config = configparser.ConfigParser()
        config.read(os.path.join(BASE_DIR, 'config.ini'), encoding="utf-8")
        port = config.get('flask_api', 'port')
    
        print('Flask后台已开启~')
        server = pywsgi.WSGIServer(('0.0.0.0', int(port)), app)
        server.serve_forever()
    
    • 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

    3、get直接返回,不再等待界面加载完成

    from selenium import webdriver
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
     # get直接返回,不再等待界面加载完成
     desired_capabilities = DesiredCapabilities.CHROME
     desired_capabilities["pageLoadStrategy"] = "none"
    
    # 创建chrome参数对象
    options = webdriver.ChromeOptions()
    options.add_argument('--no-sandbox')  # 解决DevToolsActivePort文件不存在的报错
    options.add_argument('window-size=1600x900')  # 指定浏览器分辨率
    options.add_argument('--disable-gpu')  # 谷歌文档提到需要加上这个属性来规避bug
    # options.add_argument('--hide-scrollbars')  # 隐藏滚动条, 应对一些特殊页面
    options.add_experimental_option('excludeSwitches', ['enable-automation'])  # 开启管理者模式
    # options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
    # 禁止图片和css加载
    prefs = {"profile.managed_default_content_settings.images": 2, 'permissions.default.stylesheet': 2}
    options.add_experimental_option("prefs", prefs)
    # options.add_argument('--headless')  # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
    browser.set_page_load_timeout(timeout)
    browser.set_script_timeout(timeout)  # 这两种设置都进行才有效
    
    browser = webdriver.Chrome(executable_path='/root/桌面/youlv/driver/chromedriver',chrome_options=options, desired_capabilities=desired_capabilities)
    # browser = webdriver.Firefox(executable_path='/usr/bin/geckodriver')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    机器学习中的数学原理——梯度下降法(最速下降法)
    [数据结构]什么是树?什么是二叉树?
    题目:2725.间隔取消
    计算机网络
    程序员学习 CPU 有什么用?
    简单描述 MySQL 中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响(从读写两方面)
    【软考 系统架构设计师】系统安全分析与设计③ 网络安全
    1143. 最长公共子序列
    【JAVA】异常
    基于多序列脑影像特征的机器学习分类方法
  • 原文地址:https://blog.csdn.net/weixin_42277380/article/details/136227513