ico项目网站建设,设计师做网站的流程,建设银行app忘记登录密码,dedecms免费网站模板今天给大家推荐一款基于Python的网页自动化工具#xff1a;DrissionPage。这款工具既能控制浏览器#xff0c;也能收发数据包#xff0c;甚至能把两者合而为一#xff0c;简单来说#xff1a;集合了WEB浏览器自动化的便利性和 requests 的高效率。
一、DrissionPage产生背…今天给大家推荐一款基于Python的网页自动化工具DrissionPage。这款工具既能控制浏览器也能收发数据包甚至能把两者合而为一简单来说集合了WEB浏览器自动化的便利性和 requests 的高效率。
一、DrissionPage产生背景
实现网页自动化会有两类形式
直接向服务器发送请求数据包获取需要的数据模拟真实用户操作行为控制浏览器跟网页进行交互
前者轻量级速度快例如requests 库。但requests面对需要登录的网站时往往还要应付验证码、JS 混淆、签名参数等反爬手段门槛较高。若数据是由 JS 计算生成的还须重现计算过程开发效率不高。
而后者直接使用浏览器模拟用户行为如Selenium库可以很大程度上绕过这些坑但浏览器运行效率不高。
因此DrissionPag设计初衷是将它们合而为一能够在不同须要时切换相应模式并提供一种人性化的使用方法提高开发和运行效率。
为什么叫DrissionPag
Selenium框架用于操作浏览器的对象叫 Driverrequests 用于管理请求连接的对象叫 Session因此Drission 就是它们两者的合体。在旧版本中是通过对 selenium 和 requests 的重新封装实现的。
但从 3.0 版开始作者另起炉灶用 chromium 协议自行实现了 selenium 全部功能从而摆脱了对 selenium 的依赖功能更多更强运行效率更高开发更灵活。
二、DrissionPage亮点特色
本库采用全自研的内核对比 selenium有以下优点
无 webdriver 特征不会被网站识别无需为不同版本的浏览器下载不同的驱动运行速度更快可以跨 iframe 查找元素无需切入切出iframe 看作普通元素获取后可直接在其中查找元素逻辑更清晰可以同时操作浏览器中的多个标签页即使标签页为非激活状态无需切换内置等待和自动重试功能。使不稳定的网络变得易于控制程序更稳定编写更省心允许反复使用已经打开的浏览器。无须每次运行从头启动浏览器调试超方便极简的语法规则。集成大量常用功能定位元素更加容易功能更强大稳定使用 POM 模式封装可直接用于测试便于扩展等等。。。
三、安装搭建
说了这么多相信很多人已经跃跃欲试了怎么快速搭建这套框架先要准备一些基础环境。
环境准备
操作系统Windows、Linux 或 Mac。python 版本3.6 及以上支持浏览器Chromium 内核如 Chrome 和 Edge
项目地址
https://gitee.com/g1879/DrissionPage使用 pip 安装 DrissionPage
pip install DrissionPage另外在开始之前我们先进行一些简单设置。如果只使用收发数据包功能无须任何准备工作。
如果要控制浏览器须设置浏览器路径。程序默认设置控制 Chrome所以以下用 Chrome 作为演示。如果要使用 Edge 或其它 Chromium 内核浏览器设置方法是一样的。
设置浏览器路径
from DrissionPage.easy_set import set_paths
set_paths(browser_pathr这里修改为您的Chrome浏览器exe文件路径)这段代码会记录 Chrome 浏览器路径到配置文件。由于路径设置只要运行一次即可不要写到正式程序里。一般建议新建一个临时 py 文件并输入以下代码填入您电脑里的 Chrome 浏览器 exe 文件路径然后执行。
四、实战一下
1、尝试启动浏览器
from DrissionPage import ChromiumPagepage ChromiumPage()
page.get(https://www.baidu.com)
执行以下代码如果正常启动了浏览器并且访问了百度说明可直接使用跳过后面的步骤即可。 执行代码前如果已有打开的 Chrome 浏览器请关闭。 2、与selenium框架代码对比 #案例一用显性等待方式查找第一个文本包含 some text 的元素。
# 使用 selenium
element WebDriverWait(driver).until(ec.presence_of_element_located((By.XPATH, //*[contains(text(), some text)])))# 使用 DrissionPage
element page(some text)#案例二跳转到第一个标签页
# 使用 selenium
driver.switch_to.window(driver.window_handles[0])# 使用 DrissionPage
page.to_tab(0)# 案例三拖拽一个元素
# 使用 selenium
ActionChains(driver).drag_and_drop(ele1, ele2).perform()# 使用 DrissionPage
ele1.drag_to(ele2)以上代码实现一模一样的功能但DrissionPage代码明显更简洁优雅。
3、与requests框架代码对比 # 案例一获取元素内容
url https://baike.baidu.com/item/python# 使用 requests
from lxml import etree
headers {User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36}
response requests.get(url, headers headers)
html etree.HTML(response.text)
element html.xpath(//h1)[0]
title element.text# 使用 DrissionPage
page WebPage(s)
page.get(url)
title page(tag:h1).text4、DrissionPage不同模式切换
例如用浏览器登录网站然后切换到 requests 读取网页。两者会共享登录信息。
from DrissionPage import WebPage
from time import sleep# 创建页面对象默认 d 模式
page WebPage()
# 访问个人中心页面未登录重定向到登录页面
page.get(https://gitee.com/profile) # 使用 selenium 输入账号密码登录
page.ele(id:user_login).input(your_user_name)
page.ele(id:user_password).input(your_password\n)
sleep(1)# 切换到 s 模式
page.change_mode()
# 登录后 session 模式的输出
print(登录后title, page.title, \n) 五、小结
DrissionPage体验一番后虽然也发现了一些不足的地方但整得来讲很多设计理念还是非常值得借鉴的更多功能就留给大家去探索了项目文档地址
http://g1879.gitee.io/drissionpagedocs/