Python|DrissionPage实现某网站点赞收藏

在《Python|selenium实现自动点赞收藏(进阶版)》中,我通过 selenium 实现了某网站积分的自动获取。作为 Web 自动化测试工具库, selenium 还是比较流行的,但它的非标准内核机制使用时实在令人难受,因为你不得不关注本机浏览器的版本,需要定期下载对应的webdriver。今天介绍一个比较好用的库:DrissionPage,而且是国产开源的库!

介绍

DrissionPage的官方介绍是:

DrissionPage 是一个基于 python 的网页自动化工具。
它既能控制浏览器,也能收发数据包,还能把两者合而为一。
可兼顾浏览器自动化的便利性和 requests 的高效率。
它功能强大,内置无数人性化设计和便捷功能。
它的语法简洁而优雅,代码量少,对新手友好。

官网链接:https://g1879.gitee.io/drissionpagedocs/
在使用时,DrissionPage 有三种页面类。如果只需要控制浏览器,可以使用 ChromiumPage ;如果只需要收发数据包,可以使用 SessionPage ;如果既要控制浏览器又需要收发数据包,可以使用 WebPage 。

  • drissionpage 源代码的注释全中文,很详细。相比于有很多国人开发的包文档写的英文,这个通篇中文注释的 drissionpage 理应被狠狠点赞。
  • 无需 selenium 使用的 chromedriver ,再也不用担心针对driver的反爬了,也不用考虑 driver.exe 的版本适配, 跨平台更方便, 真的开心。
  • 兼顾浏览器自动化的便利性和 requests 的高效率。它整合了requests, 甚至可以无缝切换。
  • 语法便利。真的厌倦了对selenium的各种罗里吧嗦的封装,而 drissionpage 可以跨 查找元素,无需切入切出。可同时操作多个 tab 标签页,无需切换。
  • 更快的运行速度。

最令人惊喜的是 DrissionPage 不依赖 webdriver ,且运行时对屏幕没有依赖。也就是说:你在使用前只需要确保本机有chrome内核浏览器即可,不需要定期下载插件,而且在 DrissionPage 运行时你还能正常操作其他软件。
我们这次还以某网站的积分获取为例,因为只需要进行浏览器页面操作,我们本地使用 ChromiumPage 类。

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from DrissionPage import ChromiumPage,ChromiumOptions
import time
import flet as ft

class webChick():
def __init__(self) -> None:
co = ChromiumOptions(read_file=False)
co.set_paths(browser_path='C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe')
self.webpage = ChromiumPage(addr_or_opts=co)

'''打开浏览器'''
def homePage(self):
try:
self.webpage.get('https://xxxx/')
self.webpage.set.window.maximized()
return '成功打开首页'
except Exception as e:
return e

'''准备登录'''
def login(self):
time.sleep(1)
try:
if self.webpage.ele('xpath://img[@alt="资讯"]'):
return '浏览器已有登录信息'
else :
time.sleep(30)
return '请在30秒内完成登录,登录后请等待系统自动处理'
except Exception as e:
return e

'''网页处理前的准备工作'''
def mainPage(self):
try:
self.webpage.ele('xpath://img[@alt="资讯"]').click()
time.sleep(1)
self.webpage.ele('xpath://div[text()="推荐"]').click()
time.sleep(1)
return '打开资讯页面,进入推荐页签'
except Exception as e:
return e

'''处理具体文章的点赞和收藏'''
def auto_click(self,num):
try:
msg = ''
self.webpage.ele('xpath://span[text()="热度优先"]').click()
time.sleep(1)
self.webpage.ele('xpath://span[text()="时间优先"]').click()
time.sleep(1)
# 打开第一篇文章
self.webpage.ele('xpath://div [@class="home-main-partyNews" and @style="margin-top: 0px;"]//div [@class="dynamic-left-title"]').click()
# time.sleep(1)
# 切换标签
self.webpage.wait.new_tab()
new_tab = self.webpage.get_tab(0)
new_tab.wait.load_start()
# 收藏
try :
new_tab.ele('xpath://div[@class="icon"]/span[@class="pointer"]/i[@class="iconfont icon-shoucanghuise"]').click()
msg = '第[{}]篇文章收藏成功'.format(num)
except :
try:
new_tab.ele('xpath://div[@style="display: block;"]/span[@class="header-icon"]/i[@class="iconfont icon-weishoucang"]').click()
msg = '第[{}]篇文章收藏成功'.format(num)
except :
msg = new_tab.title + '_收藏未成功'
time.sleep(1)
# 点赞
try :
new_tab.ele('xpath://div[@class="icon"]/span[@class="pointer"]/i[@class="iconfont icon-dianzanhuise"]').click()
msg = msg + '\n第[{}]篇文章点赞成功'.format(num)
except :
try:
new_tab.ele('xpath://div[@style="display: block;"]/span[@class="header-icon"]/i[@class="iconfont icon-dianzanhuise"]').click()
msg = msg + '\n第[{}]篇文章点赞成功'.format(num)
except :
msg = msg + '\n' + new_tab.title + '_点赞未成功'
time.sleep(1)
# 关闭当前标签
self.webpage.close_other_tabs()
time.sleep(0.5)
return msg
except Exception as e:
return e

# 退出浏览器
def close_web(self):
self.webpage.quit()

商业转载请联系作者获得授权,非商业转载请注明出处。

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

Python|DrissionPage实现某网站点赞收藏
http://hncd1024.github.io/2024/02/05/Python_DrissionPage/
作者
CHEN DI
发布于
2024-02-05
许可协议