mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
147 lines
4.7 KiB
Python
147 lines
4.7 KiB
Python
# -*- coding:utf-8 -*-
|
||
"""
|
||
@Author : g1879
|
||
@Contact : g1879@qq.com
|
||
@File : driver_page.py
|
||
"""
|
||
from typing import Union
|
||
|
||
from selenium import webdriver
|
||
|
||
from DrissionPage.config import OptionsManager, DriverOptions
|
||
|
||
|
||
def set_paths(driver_path: str = None,
|
||
chrome_path: str = None,
|
||
debugger_address: str = None,
|
||
tmp_path: str = None,
|
||
download_path: str = None,
|
||
user_data_path: str = None,
|
||
cache_path: str = None,
|
||
check_version: bool = True) -> None:
|
||
"""快捷的路径设置函数 \n
|
||
:param driver_path: chromedriver.exe路径
|
||
:param chrome_path: chrome.exe路径
|
||
:param debugger_address: 调试浏览器地址,例:127.0.0.1:9222
|
||
:param download_path: 下载文件路径
|
||
:param tmp_path: 临时文件夹路径
|
||
:param user_data_path: 用户数据路径
|
||
:param cache_path: 缓存路径
|
||
:param check_version: 是否检查chromedriver和chrome是否匹配
|
||
:return: None
|
||
"""
|
||
om = OptionsManager()
|
||
|
||
def format_path(path: str) -> str:
|
||
return path.replace('/', '\\')
|
||
|
||
if driver_path is not None:
|
||
om.set_item('paths', 'chromedriver_path', format_path(driver_path))
|
||
if chrome_path is not None:
|
||
om.set_item('chrome_options', 'binary_location', format_path(chrome_path))
|
||
if debugger_address is not None:
|
||
om.set_item('chrome_options', 'debugger_address', format_path(debugger_address))
|
||
if tmp_path is not None:
|
||
om.set_item('paths', 'global_tmp_path', format_path(tmp_path))
|
||
if download_path is not None:
|
||
experimental_options = om.get_value('chrome_options', 'experimental_options')
|
||
experimental_options['prefs']['download.default_directory'] = format_path(download_path)
|
||
om.set_item('chrome_options', 'experimental_options', experimental_options)
|
||
om.save()
|
||
if user_data_path is not None:
|
||
set_argument('--user-data-dir', format_path(user_data_path))
|
||
if cache_path is not None:
|
||
set_argument('--disk-cache-dir', format_path(cache_path))
|
||
if check_version:
|
||
check_driver_version(format_path(driver_path), format_path(chrome_path))
|
||
|
||
|
||
def set_argument(arg: str, value: Union[bool, str]) -> None:
|
||
"""设置浏览器配置argument属性 \n
|
||
:param arg: 属性名
|
||
:param value: 属性值,有值的属性传入值,没有的传入bool
|
||
:return: None
|
||
"""
|
||
do = DriverOptions()
|
||
do.remove_argument(arg)
|
||
if value:
|
||
arg_str = arg if isinstance(value, bool) else f'{arg}={value}'
|
||
do.add_argument(arg_str)
|
||
do.save()
|
||
|
||
|
||
def set_headless(on_off: bool = True) -> None:
|
||
"""设置是否隐藏浏览器界面 \n
|
||
:param on_off: 开或关
|
||
:return: None
|
||
"""
|
||
set_argument('--headless', on_off)
|
||
|
||
|
||
def set_no_imgs(on_off: bool = True) -> None:
|
||
"""设置是否禁止加载图片 \n
|
||
:param on_off: 开或关
|
||
:return: None
|
||
"""
|
||
set_argument('--blink-settings=imagesEnabled=false', on_off)
|
||
|
||
|
||
def set_no_js(on_off: bool = True) -> None:
|
||
"""设置是否禁用js \n
|
||
:param on_off: 开或关
|
||
:return: None
|
||
"""
|
||
set_argument('--disable-javascript', on_off)
|
||
|
||
|
||
def set_mute(on_off: bool = True) -> None:
|
||
"""设置是否静音 \n
|
||
:param on_off: 开或关
|
||
:return: None
|
||
"""
|
||
set_argument('--mute-audio', on_off)
|
||
|
||
|
||
def set_user_agent(user_agent: str) -> None:
|
||
"""设置user agent \n
|
||
:param user_agent: user agent文本
|
||
:return: None
|
||
"""
|
||
set_argument('user-agent', user_agent)
|
||
|
||
|
||
def set_proxy(proxy: str) -> None:
|
||
"""设置代理 \n
|
||
:param proxy: 代理网址和端口
|
||
:return: None
|
||
"""
|
||
set_argument('--proxy-server', proxy)
|
||
|
||
|
||
def check_driver_version(driver_path: str = None, chrome_path: str = None) -> bool:
|
||
"""检查传入的chrome和chromedriver是否匹配 \n
|
||
:param driver_path: chromedriver.exe路径
|
||
:param chrome_path: chrome.exe路径
|
||
:return: 是否匹配
|
||
"""
|
||
print('正在检测可用性...')
|
||
om = OptionsManager()
|
||
driver_path = driver_path or om.get_value('paths', 'chromedriver_path') or 'chromedriver'
|
||
chrome_path = chrome_path or om.get_value('chrome_options', 'binary_location')
|
||
do = DriverOptions(read_file=False)
|
||
do.add_argument('--headless')
|
||
if chrome_path:
|
||
do.binary_location = chrome_path
|
||
try:
|
||
driver = webdriver.Chrome(driver_path, options=do)
|
||
driver.quit()
|
||
print('版本匹配,可正常使用。')
|
||
return True
|
||
except Exception as e:
|
||
info = f'''
|
||
出现异常:
|
||
{e}chromedriver下载网址:https://chromedriver.chromium.org/downloads
|
||
'''
|
||
print(info)
|
||
return False
|