mirror of
https://gitee.com/g1879/DrissionPage.git
synced 2024-12-10 04:00:23 +08:00
完善README,配置保存增加保存到其它路径功能
This commit is contained in:
parent
bfb1b3acb1
commit
22296abe95
@ -15,8 +15,11 @@ from selenium.webdriver.chrome.options import Options
|
|||||||
|
|
||||||
class OptionsManager(object):
|
class OptionsManager(object):
|
||||||
"""管理配置文件内容的类"""
|
"""管理配置文件内容的类"""
|
||||||
|
|
||||||
def __init__(self, path: str = None):
|
def __init__(self, path: str = None):
|
||||||
"""初始化,读取配置文件,如没有设置临时文件夹,则设置并新建"""
|
"""初始化,读取配置文件,如没有设置临时文件夹,则设置并新建
|
||||||
|
:param path: ini文件的路径,默认读取模块文件夹下的
|
||||||
|
"""
|
||||||
self.path = path or Path(__file__).parent / 'configs.ini'
|
self.path = path or Path(__file__).parent / 'configs.ini'
|
||||||
self._conf = ConfigParser()
|
self._conf = ConfigParser()
|
||||||
self._conf.read(self.path, encoding='utf-8')
|
self._conf.read(self.path, encoding='utf-8')
|
||||||
@ -46,13 +49,17 @@ class OptionsManager(object):
|
|||||||
option[j[0]] = self._conf.get(section, j[0])
|
option[j[0]] = self._conf.get(section, j[0])
|
||||||
return option
|
return option
|
||||||
|
|
||||||
def set_item(self, section: str, item: str, value: str):
|
def set_item(self, section: str, item: str, value: str) -> None:
|
||||||
"""设置配置值"""
|
"""设置配置值"""
|
||||||
self._conf.set(section, item, str(value))
|
self._conf.set(section, item, str(value))
|
||||||
|
|
||||||
def save(self):
|
def save(self, path: str = None) -> None:
|
||||||
"""保存配置文件"""
|
"""保存配置文件
|
||||||
self._conf.write(open(self.path, 'w'))
|
:param path: ini文件的路径,默认保存到模块文件夹下的
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
path = path or Path(__file__).parent / 'configs.ini'
|
||||||
|
self._conf.write(open(path, 'w'))
|
||||||
|
|
||||||
|
|
||||||
class DriverOptions(Options):
|
class DriverOptions(Options):
|
||||||
@ -68,25 +75,28 @@ class DriverOptions(Options):
|
|||||||
'experimental_options'] if 'experimental_options' in options_dict else {}
|
'experimental_options'] if 'experimental_options' in options_dict else {}
|
||||||
self._debugger_address = options_dict['debugger_address'] if 'debugger_address' in options_dict else None
|
self._debugger_address = options_dict['debugger_address'] if 'debugger_address' in options_dict else None
|
||||||
|
|
||||||
def save(self):
|
def save(self, path: str = None) -> None:
|
||||||
"""保存设置到文件"""
|
"""保存设置到文件
|
||||||
|
:param path: ini文件的路径,默认保存到模块文件夹下的
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
om = OptionsManager()
|
om = OptionsManager()
|
||||||
options = _chrome_options_to_dict(self)
|
options = _chrome_options_to_dict(self)
|
||||||
for i in options:
|
for i in options:
|
||||||
om.set_item('chrome_options', i, options[i])
|
om.set_item('chrome_options', i, options[i])
|
||||||
om.save()
|
om.save(path)
|
||||||
|
|
||||||
def remove_argument(self, value: str):
|
def remove_argument(self, value: str) -> None:
|
||||||
"""移除一个设置"""
|
"""移除一个设置"""
|
||||||
if value in self._arguments:
|
if value in self._arguments:
|
||||||
self._arguments.remove(value)
|
self._arguments.remove(value)
|
||||||
|
|
||||||
def remove_experimental_option(self, key: str):
|
def remove_experimental_option(self, key: str) -> None:
|
||||||
"""移除一个实验设置,传入key值删除"""
|
"""移除一个实验设置,传入key值删除"""
|
||||||
if key in self._experimental_options:
|
if key in self._experimental_options:
|
||||||
self._experimental_options.pop(key)
|
self._experimental_options.pop(key)
|
||||||
|
|
||||||
def remove_all_extensions(self):
|
def remove_all_extensions(self) -> None:
|
||||||
"""移除所有插件
|
"""移除所有插件
|
||||||
因插件是以整个文件储存,难以移除其中一个,故如须设置则全部移除再重设"""
|
因插件是以整个文件储存,难以移除其中一个,故如须设置则全部移除再重设"""
|
||||||
self._extensions = []
|
self._extensions = []
|
||||||
|
@ -1,65 +1,31 @@
|
|||||||
[paths]
|
[paths]
|
||||||
;chromedriver_path = D:\python\Google Chrome\Chrome\chromedriver81.exe
|
chromedriver_path =
|
||||||
chromedriver_path = D:\python\Google Chrome\Chrome\chromedriver.exe
|
global_tmp_path =
|
||||||
global_tmp_path = D:\python\projects\fsjy\upload_news\DrissionPage\tmp
|
|
||||||
|
|
||||||
[chrome_options]
|
[chrome_options]
|
||||||
debugger_address =
|
debugger_address =
|
||||||
;127.0.0.1:9222
|
binary_location =
|
||||||
;binary_location = C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
|
|
||||||
binary_location = D:\python\Google Chrome\Chrome\chrome.exe
|
|
||||||
arguments = [
|
arguments = [
|
||||||
; 隐藏浏览器窗口
|
'--headless',
|
||||||
'--headless',
|
'--no-sandbox',
|
||||||
; 静音
|
'--disable-gpu'
|
||||||
'--mute-audio',
|
]
|
||||||
; 不使用沙盒
|
|
||||||
'--no-sandbox',
|
|
||||||
; 不加载图片
|
|
||||||
; '--blink-settings=imagesEnabled=false',
|
|
||||||
; 指定用户文件夹路径
|
|
||||||
; r'--user-data-dir="E:\tmp\chrome_tmp"',
|
|
||||||
; 指定缓存路径
|
|
||||||
; '-–disk-cache-dir=""',
|
|
||||||
; 编码格式
|
|
||||||
'zh_CN.UTF-8',
|
|
||||||
; 设置代理
|
|
||||||
; "--proxy-server=http://127.0.0.1:1081",
|
|
||||||
; 隐藏滚动条
|
|
||||||
; '--hide-scrollbars',
|
|
||||||
; 浏览器窗口最大化
|
|
||||||
; '--start-maximized',
|
|
||||||
; 禁用JavaScript
|
|
||||||
; "--disable-javascript",
|
|
||||||
; 模拟移动设备
|
|
||||||
; 'user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"',
|
|
||||||
; 谷歌文档提到需要加上这个属性来规避bug
|
|
||||||
'--disable-gpu'
|
|
||||||
]
|
|
||||||
extensions = []
|
extensions = []
|
||||||
experimental_options = {
|
experimental_options = {
|
||||||
'prefs': {
|
'prefs': {
|
||||||
; 设置下载路径
|
'profile.default_content_settings.popups': 0,
|
||||||
'download.default_directory': r'D:\python\projects\fsjy\upload_news\DrissionPage\tmp',
|
'profile.default_content_setting_values': {'notifications': 2},
|
||||||
; 下载不弹出窗口
|
'plugins.plugins_list': [{"enabled": False, "name": "Chrome PDF Viewer"}],
|
||||||
'profile.default_content_settings.popups': 0,
|
'excludeSwitches': ["ignore-certificate-errors", "enable-automation"],
|
||||||
; 无弹窗
|
'useAutomationExtension': False
|
||||||
'profile.default_content_setting_values': {'notifications': 2},
|
}
|
||||||
; 禁用PDF插件
|
}
|
||||||
'plugins.plugins_list': [{"enabled": False, "name": "Chrome PDF Viewer"}],
|
|
||||||
; 设置为开发者模式,防反爬虫(无用)
|
|
||||||
'excludeSwitches': ["ignore-certificate-errors", "enable-automation"],
|
|
||||||
'useAutomationExtension': False
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[session_options]
|
[session_options]
|
||||||
headers = {
|
headers = {
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8",
|
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8",
|
||||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||||
"Accept-Language": "zh-cn",
|
"Connection": "keep-alive",
|
||||||
"Connection": "keep-alive",
|
"Accept-Charset": "utf-8;q=0.7,*;q=0.7"
|
||||||
"Accept-Charset": "GB2312,utf-8;q=0.7,*;q=0.7"
|
}
|
||||||
}
|
|
||||||
;proxies = { "http": "127.0.0.1:8888", "https": "http://127.0.0.1:8888" }
|
|
||||||
|
|
||||||
|
104
README.md
104
README.md
@ -18,6 +18,13 @@ DrissionPage,即driver和session的合体。
|
|||||||
|
|
||||||
除了合并两者,本库还以网页为单位封装了常用功能,简化了selenium的操作和语句,在用于网页自动化操作时,减少考虑细节,专注功能实现,使用更方便。
|
除了合并两者,本库还以网页为单位封装了常用功能,简化了selenium的操作和语句,在用于网页自动化操作时,减少考虑细节,专注功能实现,使用更方便。
|
||||||
|
|
||||||
|
**项目地址:**
|
||||||
|
|
||||||
|
- https://github.com/g1879/DrissionPage
|
||||||
|
- https://gitee.com/g1879/DrissionPage
|
||||||
|
|
||||||
|
**联系邮箱:**g1879@qq.com
|
||||||
|
|
||||||
# 特性
|
# 特性
|
||||||
|
|
||||||
***
|
***
|
||||||
@ -234,41 +241,80 @@ element.location # 元素位置
|
|||||||
|
|
||||||
## 保存配置
|
## 保存配置
|
||||||
|
|
||||||
因chrome和headers配置繁多,故设置一个ini文件专门用于保存常用配置,你可使用OptionsManager对象获取和保存配置,用DriverOptions对象修改chrome配置。
|
因chrome和headers配置繁多,故设置一个ini文件专门用于保存常用配置,你可使用OptionsManager对象获取和保存配置,用DriverOptions对象修改chrome配置。你也可以保存多个ini文件,按不同项目须要调用。
|
||||||
|
|
||||||
### ini文件内容
|
### ini文件内容
|
||||||
|
|
||||||
ini文件默认拥有三部分配置:paths、chrome_options、session_options。
|
ini文件默认拥有三部分配置:paths、chrome_options、session_options,初始内容如下。
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[paths]
|
[paths]
|
||||||
chromedriver_path =
|
|
||||||
; chromedriver.exe路径
|
; chromedriver.exe路径
|
||||||
global_tmp_path =
|
chromedriver_path =
|
||||||
; 临时文件夹路径,用于保存截图、文件下载等
|
; 临时文件夹路径,用于保存截图、文件下载等
|
||||||
|
global_tmp_path =
|
||||||
|
|
||||||
[chrome_options]
|
[chrome_options]
|
||||||
debugger_address =
|
|
||||||
; 已打开的浏览器地址和端口,如127.0.0.1:9222
|
; 已打开的浏览器地址和端口,如127.0.0.1:9222
|
||||||
binary_location =
|
debugger_address =
|
||||||
; chrome.exe路径
|
; chrome.exe路径
|
||||||
arguments = []
|
binary_location =
|
||||||
; 配置信息,如'--headless',
|
; 配置信息
|
||||||
extensions = []
|
arguments = [
|
||||||
|
; 隐藏浏览器窗口
|
||||||
|
'--headless',
|
||||||
|
; 静音
|
||||||
|
'--mute-audio',
|
||||||
|
; 不使用沙盒
|
||||||
|
'--no-sandbox',
|
||||||
|
; 谷歌文档提到需要加上这个属性来规避bug
|
||||||
|
'--disable-gpu'
|
||||||
|
]
|
||||||
; 插件
|
; 插件
|
||||||
experimental_options = {}
|
extensions = []
|
||||||
; 实验性配置
|
; 实验性配置
|
||||||
|
experimental_options = {
|
||||||
|
'prefs': {
|
||||||
|
; 下载不弹出窗口
|
||||||
|
'profile.default_content_settings.popups': 0,
|
||||||
|
; 无弹窗
|
||||||
|
'profile.default_content_setting_values': {'notifications': 2},
|
||||||
|
; 禁用PDF插件
|
||||||
|
'plugins.plugins_list': [{"enabled": False, "name": "Chrome PDF Viewer"}],
|
||||||
|
; 设置为开发者模式,防反爬虫(无用)
|
||||||
|
'excludeSwitches': ["ignore-certificate-errors", "enable-automation"],
|
||||||
|
'useAutomationExtension': False
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[session_options]
|
[session_options]
|
||||||
headers = {
|
headers = {
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8",
|
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8",
|
||||||
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
||||||
"Accept-Language": "zh-cn",
|
|
||||||
"Connection": "keep-alive",
|
"Connection": "keep-alive",
|
||||||
"Accept-Charset": "GB2312,utf-8;q=0.7,*;q=0.7"
|
"Accept-Charset": "utf-8;q=0.7,*;q=0.7"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 使用示例
|
||||||
|
|
||||||
|
```python
|
||||||
|
from DrissionPage import *
|
||||||
|
from DrissionPage.configs import *
|
||||||
|
|
||||||
|
driver_options = DriverOptions() # 从默认ini文件读取配置
|
||||||
|
driver_options = DriverOptions('D:\\settings.ini') # 从传入的ini文件读取配置
|
||||||
|
driver_options.add_argument('--headless') # 添加配置
|
||||||
|
driver_options.remove_experimental_options('prefs') # 移除配置
|
||||||
|
driver_options.save() # 保存配置
|
||||||
|
driver_options.save('D:\\settings.ini') # 保存到其它路径
|
||||||
|
|
||||||
|
options_manager = OptionsManager() # 创建OptionsManager对象
|
||||||
|
driver_path = options_manager.get_value('paths', 'chromedriver_path') # 读取路径信息
|
||||||
|
|
||||||
|
drission = Drission(driver_options, driver_path) # 使用配置创建Drission对象
|
||||||
|
```
|
||||||
|
|
||||||
### OptionsManager对象
|
### OptionsManager对象
|
||||||
|
|
||||||
OptionsManager对象用于读取、设置和保存配置。
|
OptionsManager对象用于读取、设置和保存配置。
|
||||||
@ -277,9 +323,12 @@ OptionsManager对象用于读取、设置和保存配置。
|
|||||||
get_value(section, item) -> str # 获取某个配置的值
|
get_value(section, item) -> str # 获取某个配置的值
|
||||||
get_option(section) -> dict # 以字典格式返回配置全部属性
|
get_option(section) -> dict # 以字典格式返回配置全部属性
|
||||||
set_item(section, item, value) # 设置配置属性
|
set_item(section, item, value) # 设置配置属性
|
||||||
save() # 保存配置到ini文件
|
save() # 保存配置到默认ini文件
|
||||||
|
save('D:\\settings.ini') # 保存到其它路径
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**注意**:保存时若不传入路径,会保存到模块目录下的ini文件,即使读取的不是默认ini文件也一样。
|
||||||
|
|
||||||
### DriverOptions对象
|
### DriverOptions对象
|
||||||
|
|
||||||
DriverOptions对象继承自selenium.webdriver.chrome.options的Options对象,在其基础上增加了以下方法:
|
DriverOptions对象继承自selenium.webdriver.chrome.options的Options对象,在其基础上增加了以下方法:
|
||||||
@ -289,24 +338,9 @@ remove_argument(value) # 删除某argument值
|
|||||||
remove_experimental_option(key) # 删除某experimental_option设置
|
remove_experimental_option(key) # 删除某experimental_option设置
|
||||||
remove_all_extensions() # 删除全部插件
|
remove_all_extensions() # 删除全部插件
|
||||||
save() # 保存配置到ini文件
|
save() # 保存配置到ini文件
|
||||||
|
save('D:\\settings.ini') # 保存到其它路径
|
||||||
```
|
```
|
||||||
|
|
||||||
### 使用示例
|
|
||||||
|
|
||||||
```python
|
|
||||||
from DrissionPage import *
|
|
||||||
from DrissionPage.configs import *
|
|
||||||
|
|
||||||
driver_options = DriverOptions() # 默认从ini文件读取配置
|
|
||||||
driver_options.add_argument('--headless') # 添加配置
|
|
||||||
driver_options.remove_experimental_options('prefs') # 移除配置
|
|
||||||
driver_options.save() # 保存配置
|
|
||||||
|
|
||||||
options_manager = OptionsManager() # 创建OptionsManager对象
|
|
||||||
driver_path = options_manager.get_value('paths', 'chromedriver_path') # 读取路径信息
|
|
||||||
|
|
||||||
drission = Drission(driver_options, driver_path) # 使用配置创建Drission对象
|
|
||||||
```
|
|
||||||
|
|
||||||
# PO模式
|
# PO模式
|
||||||
|
|
||||||
@ -1127,10 +1161,14 @@ session模式的元素对象,包装了一个Element对象,并封装了常用
|
|||||||
|
|
||||||
### save
|
### save
|
||||||
|
|
||||||
save() -> None
|
save(path: str = None) -> None
|
||||||
|
|
||||||
保存设置到文件。
|
保存设置到文件。
|
||||||
|
|
||||||
|
参数说明:
|
||||||
|
|
||||||
|
- path - ini文件的路径,默认保存到模块文件夹下的
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## DriverOptions类
|
## DriverOptions类
|
||||||
@ -1171,6 +1209,10 @@ session模式的元素对象,包装了一个Element对象,并封装了常用
|
|||||||
|
|
||||||
### save()
|
### save()
|
||||||
|
|
||||||
save() -> None
|
save(path: str = None) -> None
|
||||||
|
|
||||||
保存设置到文件。
|
保存设置到文件。
|
||||||
|
|
||||||
|
参数说明:
|
||||||
|
|
||||||
|
- path - ini文件的路径,默认保存到模块文件夹下的
|
Loading…
x
Reference in New Issue
Block a user