selenium进阶设置

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

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

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

python 复制代码
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)

2、多个chromedriver程序同时运行

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

python 复制代码
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()

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

python 复制代码
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')
相关推荐
安冬的码畜日常6 小时前
【JUnit实战3_24】 第十四章:JUnit 5 扩展模型(Extension API)实战(下)
测试工具·junit·单元测试·jdbc·junit5扩展·junit extension
安全不再安全8 小时前
免杀技巧 - 早鸟注入详细学习笔记
linux·windows·笔记·学习·测试工具·web安全·网络安全
西游音月9 小时前
(2)pytest+Selenium自动化测试-环境准备
selenium·测试工具·pytest
明月与玄武13 小时前
Postman 的汉化安装中文版及使用指南!
测试工具·postman·postman汉化
程序员杰哥14 小时前
Fiddler抓包手机和部分app无法连接网络问题
自动化测试·软件测试·python·测试工具·智能手机·fiddler·测试用例
我的xiaodoujiao14 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 23--数据驱动--参数化处理 Yaml 文件
python·学习·测试工具·pytest
要一杯卡布奇诺21 小时前
测开百日计划——Day1
功能测试·测试工具·单元测试·集成测试
安冬的码畜日常2 天前
【JUnit实战3_28】第十七章:用 JUnit 5 实测 SpringBoot 项目
spring boot·功能测试·测试工具·设计模式·单元测试·junit5
程序员三藏2 天前
接口自动化测试框架搭建详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
卖个几把萌2 天前
【02】JMeter登录保存cookie用于后面的接口
测试工具·jmeter