爬虫笔记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、ChromiumPage的使用(操作浏览器)

访问页面

导入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()

动作链的简单使用

顾名思义,就是操作网页的一个标签进行移动。拖拽左边的标签移动到右边的标签,代码如下:
在这里插入图片描述

from DrissionPage import ChromiumPage
from DrissionPage.common import By


page = ChromiumPage()
page.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

"""
先获取左边的标签,然后通过action中的hold和release抓取拖拽
到指定的标签释放
"""
source = page.ele((By.ID, 'draggable'))
target = page.ele((By.ID, 'droppable'))
page.actions.hold(source).release(target)

#往右移动多少像素
page,action,hold(source).right(300)
#然后再释放
page,action,hold(source).release()

3、SessionPage的使用(收发数据包)

不同于ChromePage,SessionPage是没有浏览器窗口的,直接进行抓包获取数据的,了解即可。

from DrissionPage import SessionPage

pack = SessionPage()

url = 'https://adworld.xctf.org.cn/api/event/release_event/list/?page=1&page_size=20&search=&isSearch=false&event_status=&event_type='
pack.get(url)

print(pack.response.json())

4、WebPage

WebPage主要整合了上面两者,实现了两者之间的互通。具体可以看官网

使用DrissionPage在Mac上出现卡顿现象可能由多种原因引起。以下是一些可能的原因和解决方案: 1. **资源不足**: - **原因**:Mac的内存或CPU资源不足,导致程序运行缓慢。 - **解决方案**:关闭不必要的后台应用,确保有足够的内存和CPU资源供DrissionPage使用。 2. **浏览器驱动问题**: - **原因**:DrissionPage依赖浏览器驱动(如ChromeDriver)来控制浏览器,如果驱动版本不匹配或存在兼容性问题,可能会导致卡顿。 - **解决方案**:确保浏览器和浏览器驱动版本匹配。可以通过访问[ChromeDriver下载页面](https://sites.google.com/a/chromium.org/chromedriver/downloads)来下载与当前Chrome浏览器版本匹配的驱动。 3. **网络问题**: - **原因**:网络连接不稳定或速度慢,导致页面加载缓慢。 - **解决方案**:检查网络连接,确保网络速度正常。可以通过其他浏览器测试网络速度。 4. **DrissionPage配置问题**: - **原因**:DrissionPage的配置参数设置不当,导致性能问题。 - **解决方案**:检查DrissionPage的配置参数,如页面加载超时时间、浏览器选项等,进行适当调整。 5. **系统更新**: - **原因**:系统更新可能会影响软件的兼容性。 - **解决方案**:确保Mac操作系统和所有相关软件都是最新版本。 6. **使用轻量级浏览器**: - **原因**:默认浏览器可能过于庞大,导致性能问题。 - **解决方案**:尝试使用轻量级浏览器,如Firefox或Safari,并相应地配置DrissionPage
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

墨菲马

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

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

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

打赏作者

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

抵扣说明:

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

余额充值