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')
相关推荐
waterHBO6 小时前
python 爬虫 selenium 笔记
爬虫·python·selenium
chenjingming66614 小时前
windows使用tcpdump.exe工具进行抓包教程
网络·测试工具·tcpdump
小码哥说测试21 小时前
软件测试技术之 GPU 单元测试是什么!
自动化测试·功能测试·测试工具·jmeter·单元测试·集成测试·postman
全能全知者1 天前
不废话简单易懂的Selenium 页面操作与切换
python·selenium·测试工具·网络爬虫
测试19982 天前
使用Selenium进行网页自动化
自动化测试·软件测试·python·selenium·测试工具·自动化·测试用例
做一道光2 天前
1、QAC静态测试常用操作
软件测试·测试工具·静态测试
假女吖☌2 天前
postman接口关联
测试工具·postman
测试杂货铺2 天前
selenium元素定位:元素点击交互异常解决方法
自动化测试·软件测试·python·selenium·测试工具·职场和发展·单元测试
讓丄帝愛伱2 天前
PostMan使用变量
测试工具·postman
可愛小吉3 天前
Python 课程12-Python 自动化应用
开发语言·前端·selenium·openpyxl·reportlab