当前位置:朝夕网 » 数码科技 » 最近又火了一个Web自动化工具,python大神都在用

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

计算生成的,还须重现计算过程,体验不好,开发效率不高。合而为一,不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。的操作和语句,在用于网页自动化操作时,减少考虑细节,专注功能实现,使用更方便。一切从简,尽量提供简单直接

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

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

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

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

特性亮点功能

结构图

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

简单演示

与 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)

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

与 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')  # 支持重命名,处理文件名冲突,自动创建目标文件夹

爬取新冠排行榜

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

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 网站

网址:自动下载的项目是什么,此示例演示使用控制浏览器的方式自动登录 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

开源地址:

本文到此结束,希望对大家有所帮助!

免责声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如有侵权行为,请第一时间联系我们修改或删除,多谢。朝夕网 » 最近又火了一个Web自动化工具,python大神都在用