在《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() 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()
|