装饰公司营销型网站设计,怎么用360做网站跳转,google关键词挖掘工具,常德建设企业网站概述
前面我们已经大致了解了selenium的用法#xff0c;DerssionPage同selenium一样#xff0c;也是一个基于Python的网页自动化工具。
DrissionPage既可以实现网页的自动化操作#xff0c;也能够实现收发数据包#xff0c;也可以把两者的功能合二为一。
DressionPage的…概述
前面我们已经大致了解了selenium的用法DerssionPage同selenium一样也是一个基于Python的网页自动化工具。
DrissionPage既可以实现网页的自动化操作也能够实现收发数据包也可以把两者的功能合二为一。
DressionPage的有点在于既可以兼顾selenium自动操作网页的便捷性还不需要像selenium那样配置chromedriver也不需要过一段时间更新chrome浏览器和chromedriver。同时DrissionPage可以同requests一样高效不需要担心js逆向等问题。
简单的来说DressionPage能够高效的实现所见即所爬语法简洁优雅代码量少对新手友好。DrissionPage最大的优势在于它是最新新出的网页自动化测试工具现阶段针对他的反爬虫措施几乎没有。
安装DrissionPage
和安装requests模块一样在pycharm终端中输入如下的pip命令在网络正常的情况下就可以正常使用该模块的相关功能。
pip install DrissionPage
如果想要升级到最新的版本执行如下的命令
pip install DrissionPage --upgrade
如果想要安装指定的版本执行如下的命令
pip install DrissionPage4.0.0b17
我这里安装的是当前最行的版本如下图所示 入门指南
DrissionPage提供的功能放在如下的路径中
from DrissionPage import * # 浏览器类、配置类、页面类
from DrissionPage.errors import * # 错误类
from DrissionPage.common import * # 辅助工具类
from DrissionPage.items import * # 衍生对象用于类型判断
看到这里相信大家也是很懵圈。不要着急接下来慢慢分析我也是第一次使用DrissionPage模块。
浏览器类
from DrissionPage import Chromium
Chromium是浏览器类浏览器类主要用于连接浏览器管理标签页及其他浏览器有关的操作。Chromium相当于总管可以作为浏览器入口使用它产生的Tab对象去操作每一个标签页。
页面类
from DrissionPage import ChromiumPage
1ChromiumPage是将浏览器对象和第一个标签页对象封装在一起用于控制浏览器。ChromiumPage简化了操作使用效果与直接使用Chromium对象基本一致。不同之处在于ChromiumPage生成的标签页对象是ChromiumTab不能切换模式。
from DrissionPage import WebPage
2WebPage与ChromiumPage类似不同之处在于WebPage产生的Tab对象是可以切换模式的即既可以控制浏览器也可以收发数据包。
from DrissionPage import SessionPage
3SessionPage用于收发数据包是对requests和lxml进行封装实现的。SessionPage将网络连接和结果解析封装成页面操作逻辑和其他页面保持一致。
配置工具
from DrissionPage import ChromiumOptions
1ChromiumOptions类用于设置浏览器的启动参数这些参数只有在启动浏览器有用接管已经存在的浏览器是不起作用的。
from DrissionPage import SessionOptions
2SessionOptions类用于设置Session对象启动参数用于配置Session Page或webPage的s模式的连接参数。
from DrissionPage.common import Settings
3Settings用全局的配置如找不到元素是否抛出异常。
辅助工具
from DrissionPage.common import Keys
1Keys按键类用于键入 ctrl、alt 等按键。
from DrissionPage.common import By
2By同selenium一样。
其他工具
wait_until可等待传入的方法结果为真make_session_ele从 html 文本生成ChromiumElement对象configs_to_here把配置文件复制到当前路径get_blob获取指定的 blob 资源tree用于打印页面对象或元素对象结构from_selenium用于对接 selenium 代码from_playwright用于对接 playwright 代码
异常
from DrissionPage.errors import ElementNotFoundError
异常放在DrissionPage.errors路径。
衍生对象
from DrissionPage.items import SessionElement
from DrissionPage.items import ChromiumElement
from DrissionPage.items import ShadowRoot
from DrissionPage.items import NoneElement
from DrissionPage.items import ChromiumTab
from DrissionPage.items import MixTab
from DrissionPage.items import ChromiumFrame
Tab、Element 等被其它对象生成的对象开发过程中需要类型判断时需要导入这些类型。
设置语言
DrissionPage的报错信息及提示支持中文和英文设置中文提示的方法如下
from DrissionPage.common import SettingsSettings.set_language(zh_cn) # 设置为中文时填入zh_cnSettings.set_language(en) # 默认是英文提示
准备工作
测试是否能够通过DrissionPage启动浏览器我们这里采用的Chrome。对应的代码如下
from DrissionPage import Chromiumtab Chromium().latest_tab
tab.get(https://DrissionPage.cn)
在pycharm中运行上述代码发现Chrome能够自动打开并且能够访问官网说明我们的配置没有问题。
如果在程序运行的过程中报错说明我们的Chrome路径设置有问题
查找路径
1查找自身电脑中Chrome的路径方法如下
打开自己饿Chrome浏览器在地址栏中输入chrome://version回车。在加载中的页面中看“执行性文件”一栏其后面就是我们需要的Chrome路径。 设置路径
设置路径的方法一
设置路径的方法二
设置的方法大家可以参考官网的教程非常的方便这里不再赘述 准备工作 | DrissionPage官网 操作浏览器
from DrissionPage import Chromium# 启动或接管浏览器并创建标签页对象
tab Chromium().latest_tab # 创建一个Chromium对象用于连接浏览器并用latest_tab获取一个标签页对象
# 跳转到登录页面
tab.get(https://gitee.com/login) # get()方法用于访问参数中的网址。它会等待页面完全加载再继续执行后面的代码。默认是等待10秒
# 定位到账号文本框获取文本框元素
ele tab.ele(#user_login) # 通过html代码中的id的名字
# 输入对文本框输入账号
ele.input(1234567)
# 定位到密码文本框并输入密码
tab.ele(#user_password).input(1234567) # 通过链式操作直接输入对应的文本
# 点击登录按钮
tab.ele(value登 录).click() # 通过value值确定元素 表示按属性名查找
基本概念
网页自动化的两种形式
1直接服务器发送数据包获取需要的数据
2控制浏览器和网页进行交互。
基本使用逻辑如下无论是控制浏览器还是收发数据操作逻辑基本一致。
创建页面对象从页面对象中获取元素对象对元素对象读取或操作实现数据获取和页面控制
最主要的对象有两种页面对象和其生成的元素对象
主要对象
浏览器和标签页对象
Chromium浏览器对象用于连接浏览器管理标签页以及其他浏览器有关的操作MixTab浏览器标签页对象由Chromium对象产生一个对象控制一个实际的标签页ChromiumTab也是标签页对象由ChromiumPage对象产生不可切换收发数据包模式
元素对象
ChromiumElement浏览器元素对象SessionElement静态元素对象ChromiumFrameiframe元素对象兼有标签页对象和元素特性ShadowRootshadow-root 元素对象
Page对象
ChromiumPage能管理浏览器本身的标签页对象可用作程序入口WebPage类似于ChromiumPage整合浏览器控制和收发数据包于一体的页面对象SessionPage单纯用于收发数据包的页面对象可单独使用不会启动新浏览器窗口
称呼
MixTab、ChromiumTab统称为 Tab 对象ChromiumPage、WebPage和SessionPage统称为 Page 对象Page 对象、Tab 对象和ChromiumFrame统称为页面对象
工作模式
MixTab和WebPage既可以控制浏览器对象也可以用数据包的方式访问网络。通俗的讲前者就是如同selenium的工作模式后者就是requests的工作模式也就是前面所说的网页自动化的两种形式。
在DrissionPage中者两种工作模式分为d模式和s模式页面对象可以在这两种工作模式之间切换但任一时间只能是一种工作模式。
d模式用于控制浏览器对象不仅可以读取浏览器获取到的信息还能对页面进行操作如点击、填写、开关标签页、改变元素属性、执行 js 脚本等等。d 模式功能强大但运行速度受浏览器制约非常缓慢而且需要占用大量内存。
s模式基于数据包进行读取或发送不能对页面进行操作不能运行 js。爬取数据时如网站数据包较为简单应首选 s 模式。
模式切换
MixTab和WebPage对象可以在 d 模式和 s 模式之间切换这通常用于以下情况
当登录验证很严格难以解构如有验证码的时候用浏览器处理登录然后转换成 s 模式爬取数据。既避免了处理烧脑的 js又能享受 s 模式的速度。页面数据由 js 产生且页面结构极其复杂可以用 d 模式读取页面元素然后把元素转成 s 模式的元素进行分析。可以极大地提高 d 模式的处理速度。
以上模式转换的思想非常重要。比如说一个网站需要requests携带cookie信息才可以请求到数据倒是该网站的cookie获取非常困难数据加密或者验证码登录等这时我们应该能够想到利用selenium完成网站的登录获取cookie信息然后再使用requests携带cookie信息完成数据请求。