完善README,配置保存增加保存到其它路径功能

This commit is contained in:
g1879 2020-05-22 10:28:18 +08:00
parent bfb1b3acb1
commit 22296abe95
3 changed files with 114 additions and 96 deletions

View File

@ -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 = []

View File

@ -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
View File

@ -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文件的路径默认保存到模块文件夹下的