爬虫笔记21——DrissionPage自动化框架的使用

前言

有人说,自动化框架降低了逆向的成本,当遇到不会的逆向,我用自动化解决问题,这其实是有道理的,哈哈哈~。但是,自动化框架其实也不一定能解决所有问题,比如selenium自动化框架也有其局限性,比如某些网站使用selenium自动化是获取不到的,这个网站就是个例子。你们可以用selenium试一下,我前面的笔记有讲到selenium自动化框架的使用。所以,今天我们来记录一下新的自动化框架,DrissionPage。

DrissionPage的使用

DrissionPage是自动化工具,DrissionPage不同于selenium的区别在于,他不需要安装驱动,他是直接作用于浏览器,同样的可以直接对浏览器进行操作,还可以直接监听动态接口可以直接获取动态接口。

1、准备工具及初步了解

下载DrissionPage包

pip install DrissionPage

DrissionPage是我们国人自己写的自动化框架,所以window系统用起来可能比Mac系统好,目前支持的浏览器:Chromium 内核(如 Chrome 和 Edge)。如果遇到不会的问题,可以直接在官网找到开发者的邮箱,然后去联系他,即使我们都不认识,但是大佬看到有价值的问题也是会去想方法解决的。
DrissionPage访问模式有 3种,它们通常是程序的入口:

  • ChromiumPage:单纯用于操作浏览器的页面对象;
  • WebPage:整合浏览器控制和收发数据包于一体的页面对象;
  • SessionPage:单纯用于收发数据包的页面对象(类似于requests发请求)

2、DrissionPage的使用

访问页面

导入chromiumPage对象

from DrissionPage import chromiumPage

page = chromiumPage()
#这里其实类似于requests请求,这样就初步自动化打开一个网页了
page.get('https://www.baidu.com')

初始化配置

# 其他操作:
option = ChromiumOptions.set_browser_path(r'Chrome或者Edge浏览器的路径')
# 浏览器页面最大窗口化
option.set_argument('--start-maximized')

# 设置窗口初始大小
option.set_argument('--window-size', '600,800')
# 设置不加载图片,声音
option.no_imgs(True).mute(True)

# 无头浏览器,就是后台在运行,但是不显示浏览器页面,这里只支持window系统
option.headless()

page = ChromiumPage(addr_or_opts=option)


# 窗口最大最小
page.set.window.max()
page.set.window.mini()
page.set.window.size(800, 800)

# 修改网页的请求头
page.set.headers({"User-Agent": "1024"})

元素定位

页面对象和元素对象都拥有 ele()和 eles()方法,用于获取其内部指定子元素。

  • ele():用于定位单个的页面元素。
  • eles():用于定位一组页面元素,获取到的是一组列表。
  • DrissionPage 有自己单独的一套匹配规则,学习成本较高,可以直接把Selenium的匹配方法平移过来使用,可以节省学习成本

from DrissionPage import ChromiumPage
from DrissionPage.common import By
import random
import time

page = ChromiumPage()
page.get('https://www.baidu.com')

page.set.window.max()
# time.sleep(random.randint(1000, 2000)/1000)
page.ele((By.NAME, 'wd')).input('python')
# time.sleep(random.randint(1000, 2000)/1000)
page.ele((By.ID, 'su')).click()

a_list = page.eles((By.XPATH, '//a'))
print(a_list)
for a in a_list:
    title = a.text
    href = a.attr('href')
    print(title, href)

iFrame切换

DrissionPage不同于selenium,他是直接访问页面全部的元素,所以不用切换,还是找到iframe中的元素,定位获取操作即可

元素监听

当页面抓包获取动态数据的时候,DrissionPage可以拦截接口数据(selenium不行,需要等待动态渲染重新获取页面元素),所以DrissionPage还是很nice的。

from DrissionPage import ChromiumPage
from DrissionPage.common import By

page = ChromiumPage()
page.get('找个网站试试')
page.listen.start('接口的后缀,域名后面那一块')

# 获取监听的网址数据,返回的是一个迭代器,参数count是监听次数,默认是无数次
yie = page.listen.steps(count=10)
for pack in yie:
    print(pack.response.body)
    page.ele((By.CLASS_NAME, 'btn-next')).click()
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨菲马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值