DrissionPage/docs/使用方法/创建页面对象.md
2022-01-26 14:03:11 +08:00

162 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

在入门指南的快速上手一节,我们已经初步了解如何创建页面对象,本节进一步介绍更多功能。
页面对象类型为`MixPage`,通过`MixPage()`创建。
可以通过指定配置信息创建须要的页面对象,如无界面的浏览器、是否加载插件、是否接管已打开的浏览器、设置`headers`、设置代理等等。
这些配置信息,可以通过几种方式设置。配置的详细用法后文再讲。本节先了解创建页面对象的几种方式。
# `MixPage`类
`MixPage`页面对象封装了常用的网页操作,并实现在两种模式之间的切换。
`MixPage`须控制一个`Drission`对象并使用其中的`WebDriver``Session`对象来实现。对浏览器或网络连接的操作。如没有传入,`MixPage`会自己创建一个(使用传入的配置信息或从默认 ini 文件读取)。
初始化参数:
- mode初始化时模式`'d'``'s'`,默认为`'d'`
- drissionDrission 对象,不传入时会自动创建
- timeout超时时间s 模式时为连接时间d 模式时为查找元素、处理弹出框、输入文本等超时时间
- driver_options浏览器设置没传入`drission`参数时会用这个设置新建`Drission`对象中的`WebDriver`对象,传入`False`则不创建
- session_optionsrequests 设置,没传入`drission`参数时会用这个设置新建`Drission`对象中的`Session`对象,传入`False`则不创建
!> **注意:** <br>
有传入`drission`参数时,`driver_options``session_options`参数无效
# 直接创建
这种方式代码最简洁,程序会从配置文件中读取配置,自动生成页面对象。可以保持代码简洁。
在基本概念一节我们提到过,本库使用配置文件记录常用配置信息,也可以直接把配置写在代码里。
```python
# 默认以 d 模式创建页面对象
page = MixPage('d')
# 指定以 s 模式创建页面对象
page = MixPage('s')
```
# 通过配置信息创建
本库有两种管理配置信息的对象,分别是`DriverOptions``SessionOptions`,对应 d 模式和 s 模式的配置。
须要时,可以创建相应的配置对象进行设置。
## `DriverOptions`类
`DriverOptions`用于管理创建浏览器时的配置,浏览器创建后再修改这个配置是没有效果的。
`DriverOptions`对象能实现链式操作。
初始化参数:
- read_file是否从 ini 文件中读取配置信息
- ini_pathini 文件路径,为`None`则读取默认 ini 文件
```python
from Drission import MixPage
# 导入 DriverOptions
from DrissionPage.config import DriverOptions
# 创建浏览器配置对象,从文件读取配置,并增加设置浏览器静音和不加载图片
do = DriverOptions().set_mute().set_no_imgs()
# 用该配置创建页面对象
page = MixPage(driver_options=do)
```
## `SessionOptions`类
`SessionOptions`用于管理创建浏览器时的配置,浏览器创建后再修改这个配置是没有效果的。
`SessionOptions`对象能实现链式操作。
初始化参数:
- read_file是否从 ini 文件中读取配置信息
- ini_pathini 文件路径,为`None`则读取默认 ini 文件
```python
from Drission import MixPage
# 导入 SessionOptions
from DrissionPage.config import SessionOptions
proxies = {'http': 'http://127.0.0.1:1080',
'https': 'https://127.0.0.1:1080'}
# 创建浏览器配置对象,不从 ini 文件读取,并设置代理信息
so = SessionOptions(read_file=False).set_proxies(proxies)
# 用该配置创建页面对象s 模式)
page = MixPage(mode='s', session_options=so)
```
d 模式的配置和 s 模式的配置是可以同时使用的,不会互相影响。
```python
page = MixPage(mode='s', session_options=so, driver_options=do)
```
# 传入`Drission`对象创建
在入门指南的基本概念一节里,我们讲过`Drission`对象相当于驱动器的角色。事实上,上述两种方式,`MixPage`都会自动创建一个`Drission`对象用于管理与网站或浏览器的连接,我们当然也可以手动创建并传入`MixPage`
`Drission`一般是不用手动创建的要手动创建的时候一般是用于i以下几种情况
- 指定使用某个配置文件
- 在不同`MixPage`间传递驱动器
- 与 selenium 或 requests 原生代码拼接,用于兼容这两者的代码
## `Drission`类
初始化参数:
- driver_or_options`WebDriver`对象、`DriverOptions`对象或`Options`对象。传入`False`时自动创建一个空配置对象。
- session_or_options`Session`对象、`SessionOptions`对象、`Options`对象或设置字典。传入`False`时自动创建一个空配置对象。
- ini_path要使用的 ini 文件的路径
- proxy初始化时设置代理
## 使用其它 ini 文件创建
```python
from DrissionPage import MixPage, Drission
d = Drission(ini_path=r'./config1.ini')
page = MixPage(drission=d)
```
## 传递驱动器
多页面对象间共用驱动器,如多个`MixPage`控制一个浏览器:
```python
from Drission import MixPage
page1 = MixPage()
d = page1.drission
page2 = MixPage(drission=d)
```
## 从 selenium 和 requests 代码传入
DrissionPage 的代码能和 selenium 及 requests 代码兼容,便于不同程序间的对接。
只需把`WebDriver`对象或`Session`传入`Drission`对象即可。
```python
from selenium import webdriver
from requests import Session
from DrissionPage import Drission, MixPage
driver = webdriver.Chrome()
session = Session()
d = Drission(driver_or_options=driver, session_or_options=session)
page = MixPage(drission=d)
page.get('https://www.baidu.com')
```
## 用配置信息创建
因为`MixPage`创建时能直接接收配置信息,所以这个方法基本不需要用到,写出来只是表示有这个功能。
```python
from DrissionPage.config import DriverOptions, SessionOptions
from DrissionPage import Drission, MixPage
do = DriverOptions()
so = SessionOptions()
d = Drission(driver_or_options=do, session_or_options=so)
page = MixPage(drission=d)
```