您当前的位置:首页 > 电脑百科 > 软件技术 > 应用软件

最近又火了一个Web自动化工具,python大神都在用

时间:2022-03-17 09:21:09  来源:  作者:GitHub精选

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个开源基于 Python/ target=_blank class=infotextkey>Python 的 Web 自动化操作集成工具——DrissionPage。

最近又火了一个Web自动化工具,python大神都在用

 

用 requests 做数据采集面对要登录的网站时,要分析数据包、JS 源码,构造复杂的请求,往往还要应付验证码、JS 混淆、签名参数等反爬手段,门槛较高。若数据是由 JS 计算生成的,还须重现计算过程,体验不好,开发效率不高。

使用 selenium,可以很大程度上绕过这些坑,但 selenium 效率不高。因此,这个库将 selenium 和 requests 合而为一,不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。

除了合并两者,本库还以网页为单位封装了常用功能,简化了 selenium 的操作和语句,在用于网页自动化操作时,减少考虑细节,专注功能实现,使用更方便。一切从简,尽量提供简单直接的使用方法,对新手更友好。

 

特性

  • 代码高度集成,以简洁的代码为第一追求。
  • 页面对象可在 selenium 和 requests 模式间任意切换,保留登录状态。
  • 极简单但强大的元素定位语法,支持链式操作,代码极其简洁。
  • 两种模式提供一致的 API,使用体验一致。
  • 人性化设计,集成众多实用功能,大大降低开发工作量

亮点功能

  • 每次运行程序可以反复使用已经打开的浏览器。如手动设置网页到某个状态,再用程序接管,或手动处理登录,再用程序爬内容。无须每次运行从头启动浏览器,超级方便
  • 使用 ini 文件保存常用配置,自动调用,也提供便捷的设置 API,远离繁杂的配置项
  • 极致简明的定位语法,支持直接按文本定位元素,支持直接获取前后兄弟元素和父元素等
  • 强大的下载工具,操作浏览器时也能享受快捷可靠的下载功能
  • 下载工具支持多种方式处理文件名冲突、自动创建目标路径、断链重试等
  • 访问网址带自动重试功能,可设置间隔和超时时间
  • 访问网页能自动识别编码,无须手动设置
  • 链接参数默认自动生成Host和Referer属性
  • 可以随时直接隐藏或显示浏览器进程窗口,非 headless 或最小化
  • 可自动下载合适版本的 chromedriver,免去麻烦的配置
  • d 模式查找元素内置等待,可任意设置全局等待时间或单次查找等待时间
  • 点击元素集成 js 点击方式,一个参数即可切换点击方式
  • 点击支持失败重试,可用于保证点击成功、判读网页遮罩层是否消失等
  • 输入文本能自动判断是否成功并重试,避免某些情况下输入或清空失效的情况发生
  • d 模式下支持全功能的 xpath,可直接获取元素的某个属性,selenium 原生无此功能
  • 支持直接获取shadow-root,和普通元素一样操作其下的元素
  • 支持直接获取after和before伪元素的内容
  • 可以在元素下直接使用 > 以 css selector 方式获取当前元素直接子元素。原生不支持这种写法
  • 可简单地使用 lxml 来解析 d 模式的页面或元素,爬取复杂页面数据时速度大幅提高
  • 输出的数据均已转码及处理基本排版,减少重复劳动
  • 可方便地与 selenium 或 requests 原生代码对接,便于项目迁移
  • 使用 POM 模式封装,可直接用于测试,便于扩展
  • d 模式配置可同时兼容debugger_address和其它参数,原生不能兼容

 

结构图

如图所示,Drission对象负责链接的创建、共享登录状态等工作,类似 selenium 中 driver 的概念。MixPage对象负责对获取到的页面进行解析、操作。DriverElement和SessionElement则是从页面对象中获取到的元素对象。负责对元素进行解析和操作。

最近又火了一个Web自动化工具,python大神都在用

 

简单演示

与 selenium 代码对比

跳转到第一个标签页

# 使用 selenium:
driver.switch_to.window(driver.window_handles[0])

# 使用 DrissionPage:
page.to_tab(0)

按文本选择下拉列表

# 使用 selenium:
from selenium.webdriver.support.select import Select

select_element = Select(element)
select_element.select_by_visible_text('text')

# 使用 DrissionPage:
element.select('text')

拖拽一个元素

# 使用 selenium:
ActionChAIns(driver).drag_and_drop(ele1, ele2).perform()

# 使用 DrissionPage:
ele1.drag_to(ele2)

与 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 = MixPage('s')
page.get(url)
title = page('tag:h1').text

下载文件

url = 'https://www.baidu.com/img/flexible/logo/pc/result.png'
save_path = r'C:download'

# 使用 requests:
r = requests.get(url)
with open(f'{save_path}\img.png', 'wb') as fd:
   for chunk in r.iter_content():
       fd.write(chunk)
        
# 使用 DrissionPage:
page.download(url, save_path, 'img')  # 支持重命名,处理文件名冲突,自动创建目标文件夹

爬取新冠排行榜

网址:
https://www.outbreak.my/zh/world,此示例爬取全球新冠情况排行榜。该网站是纯 html 页面,特别适合 s 模式爬取和解析。

最近又火了一个Web自动化工具,python大神都在用

 

from DrissionPage import MixPage

# 用 s 模式创建页面对象
page = MixPage('s')  
# 访问数据网页
page.get('https://www.outbreak.my/zh/world')  

# 获取表头元素
thead = page('tag:thead')  
# 获取表头列,跳过其中的隐藏的列
title = thead.eles('tag:th@@-style:display: none;')  
data = [th.text for th in title]

print(data)  # 打印表头

# 获取内容表格元素
tbody = page('tag:tbody')  
# 获取表格所有行
rows = tbody.eles('tag:tr')  

for row in rows: 
    # 获取当前行所有列
    cols = row.eles('tag:td')  
    # 生成当前行数据列表(跳过其中没用的几列)
    data = [td.text for k, td in enumerate(cols) if k not in (2, 4, 6)]
    
    print(data)  # 打印行数据

输出:

['总 (205)', '累积确诊', '死亡', '治愈', '现有确诊', '死亡率', '恢复率']
['美国', '55252823', '845745', '41467660', '12,939,418', '1.53%', '75.05%']
['印度', '34838804', '481080', '34266363', '91,361', '1.38%', '98.36%']
['巴西', '22277239', '619024', '21567845', '90,370', '2.78%', '96.82%']
['英国', '12748050', '148421', '10271706', '2,327,923', '1.16%', '80.57%']
['俄罗斯', '10499982', '308860', '9463919', '727,203', '2.94%', '90.13%']
['法国', '9740600', '123552', '8037752', '1,579,296', '1.27%', '82.52%']
......

登录 gitee 网站

网址:https://gitee.com/login,此示例演示使用控制浏览器的方式自动登录 gitee 网站。

from DrissionPage import MixPage

# 用 d 模式创建页面对象(默认模式)
page = MixPage()
# 跳转到登录页面
page.get('https://gitee.com/login')

# 定位到账号文本框并输入账号
page.ele('#user_login').input('你的账号')
# 定位到密码文本框并输入密码
page.ele('#user_password').input('你的密码')
# 点击登录按钮
page.ele('@value=登 录').click()

 

—END—

开源协议:BSD-3-Clause

开源地址:
https://gitee.com/g1879/DrissionPage



Tags:Web自动化   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
什么是Selenium:Web自动化测试工具,提高你的工作效率
什么是Selenium01模拟浏览器:Selenium我们知道,网页会使用Java加载数据,对应于这种模式,可以通过分析数据接口来进行直接抓取,这种方式需要对网页的内容、格式和Java代码有所研究...【详细内容】
2023-09-11  Search: Web自动化  点击:(249)  评论:(0)  加入收藏
Web自动化之显式等待与隐式等待
等待就是当运行代码时,如果页面的渲染速度跟不上代码的运行速度,就需要人为的去限制代码执行的速度。在做 Web 自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找...【详细内容】
2022-10-10  Search: Web自动化  点击:(325)  评论:(0)  加入收藏
最近又火了一个Web自动化工具,python大神都在用
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个开源基于 python 的 Web 自动化操作集成工具&mda...【详细内容】
2022-03-17  Search: Web自动化  点击:(947)  评论:(0)  加入收藏
这个web自动化测试框架真香
这个web自动化测试框架真香!在web自动化测试当中, selenium架构应该是很难绕过的,很多宣称要超 selenium的下一代web自动化测试框架最终都败下阵来。不过,selenium的api确实比较...【详细内容】
2019-12-17  Search: Web自动化  点击:(459)  评论:(0)  加入收藏
▌简易百科推荐
系统优化工具,Ultimate Windows Tweaker软件体验
电脑上的Windows优化工具年年都有,每年还会翻着花样地出现新东西,都不带重复的。每个人都可以上来折腾一番Windows...从这个角度来说,Windows系统还挺“稳定”的,经得起各种用户...【详细内容】
2024-04-10  果核剥壳    Tags:系统优化   点击:(4)  评论:(0)  加入收藏
Telegram怎么不显示在线?
在Telegram中,您可以通过进入“设置” -> “隐私与安全” -> “最后在线时间”,然后选择“没有人”或者自定义特定的人群,以隐藏自己的在线状态。这样设置后,其他用户将无法看到...【详细内容】
2024-04-04  HouseRelax    Tags:Telegram   点击:(4)  评论:(0)  加入收藏
谷歌 Gmail 新规生效:为遏制钓鱼 / 欺诈情况,日群发超 5000 封邮件账号需验证
IT之家 4 月 2 日消息,谷歌为了增强对垃圾邮件和网络钓鱼攻击的管控,今天宣布正式启用新措施:对于向 Gmail 邮箱账号日群发数量超过 5000 封的用户,需要其在域名中设置 SPF / DK...【详细内容】
2024-04-02    IT之家  Tags:Gmail   点击:(14)  评论:(0)  加入收藏
钉钉AI升级多模态:能根据图片识人、翻译、创作、多轮问答
新浪科技讯 3月28日午间消息,钉钉AI助理迎来升级,上线图片理解、文档速读、工作流等产品能力,探索多模态、长文本与RPA技术在AI应用的落地。基于阿里通义千问大模型,升级后的钉...【详细内容】
2024-03-28    新浪科技  Tags:钉钉   点击:(16)  评论:(0)  加入收藏
都2024年了,谁还在用QQ聊天啊?
你还在用 QQ 吗?之所以突然这么问,是因为前些天腾讯发了份热气腾腾的财报。随手翻了翻,发现 QQ 这个老企鹅,居然还有5.54 亿多人每个月都在坚持登录。虽说和辉煌时候没法比了,但...【详细内容】
2024-03-26    差评  Tags:QQ   点击:(11)  评论:(0)  加入收藏
腾讯QQ浏览器工具权益卡上线PC端,每月最低6元
IT之家 1 月 29 日消息,腾讯 QQ 浏览器此前在手机端上线工具权益卡,现将部分权益适用范围拓展至 PC 端,每月 10 元,连续包月为 6 元。开通后用户可以在 QQ 浏览器软件内享有由腾...【详细内容】
2024-01-29    IT之家  Tags:QQ浏览器   点击:(84)  评论:(0)  加入收藏
开源工具Ventoy更新:新增对FreeBSD 14.0的支持
近日,开源装机工具Ventoy发布了1.0.97版本的更新。本次更新的主要亮点是新增了对FreeBSD 14.0版本的支持,并修复了启动问题以及解决了几个Linux独有的bug等。同时,官方还修复了...【详细内容】
2024-01-25    中关村在线  Tags:Ventoy   点击:(41)  评论:(0)  加入收藏
微软Copilot Pro来了:个人用户也能在Word里用GPT-4,20美元/月
面向个人用户的微软Copilot会员版来了。一个月多交20刀(约合人民币142元),Microsoft 365个人版/家庭版用户就能在Word、Excel、PPT等Office全家桶中用上GPT-4。就像这样,不用在C...【详细内容】
2024-01-16    量子位  Tags:Copilot Pro   点击:(94)  评论:(0)  加入收藏
微软 Edge 浏览器支持双引擎同时搜索功能,便利与槽点并存
IT之家 1 月 15 日消息,微软广告和网络服务部门首席执行官 Mikhail Parakhin 近日透露了一个微软 Edge 浏览器的隐藏功能:双引擎同时搜索。顾名思义,该功能允许用户同时使用两...【详细内容】
2024-01-16    IT之家  Tags:Edge   点击:(63)  评论:(0)  加入收藏
11个面向设计师的必备AI工具
译者 | 布加迪审校 | 重楼在当今快速发展的设计领域,人工智能(AI)工具已成为不可或缺的创新催化剂。这些工具专门用于提高效率和创造力,从而重新定义传统的设计方法。AI正在彻底...【详细内容】
2024-01-09    51CTO  Tags:AI工具   点击:(103)  评论:(0)  加入收藏
站内最新
站内热门
站内头条