python自动化框架:pywinauto实现博客之星自动化评论(代码片段)

BBinChina BBinChina     2022-12-10     200

关键词:

场景:
2021年度博客之星开始评选了,又是各路豪杰实践自身技术能力的时刻,平时都是写文章维护粉丝好友度,现在才是实打实的展现技术 😃 本分只是python框架的实践,不建议恶意推广,后果自负。

大部分玩家都采用爬虫的方式: 登录 -> 获取 cookie -> 设置cookie -> 调用评论api,再爬取其他博主的链接进行周而复始。

今天咱不讲爬虫,讲python的自动化测试框架pywinauto如何实现模拟手动操作(相同的还有pyAutoGui这个库),制造一个有血有肉的回复机器,爬虫的方式太暴力了,除了反爬外,还会给官方带来大量垃圾数据,作为一个友好型实践玩家,我们点到为止即可。

除了爬虫跟GUI库,chrome浏览器还可使用驱动的方式(chromedrive)不过这种方式也需要反爬,这里不做介绍了。

如何使用pywinauto

先附上官方文档

在我们的实践中,主要使用到了

import time
from pywinauto import keyboard
from pywinauto import mouse
from pywinauto import Application

keyboard用来模拟键盘输入以及滚动条
mouse用来模拟鼠标点击
application主要用来唤醒浏览器

先附上主要代码

import time
from pywinauto import keyboard
from pywinauto import mouse
from pywinauto import Application

def sendMsg(topicNum):
    print("topicNum"+str(topicNum))

    keyboard.send_keys('^T')
    time.sleep(3)

    keyboard.send_keys("https://bbs.csdn.net/topics/"+str(topicNum))
    keyboard.send_keys('VK_RETURN')
    time.sleep(10)


    keyboard.send_keys('VK_SPACE')
    time.sleep(3)

    mouse.click(coords=(1180, 1010))
    time.sleep(3)

    keyboard.send_keys('# d求个五星回评 ')
    keyboard.send_keys('ENTER')
    keyboard.send_keys("链接直达:[](https://bbs.csdn.net/topics/603958738)")
    keyboard.send_keys('ENTER')
    keyboard.send_keys("**私信自动源码**")
    keyboard.send_keys('^ENTER')
    time.sleep(3)

    mouse.click(coords=(1180, 200))
    fun(num+1)
    print("end ")

#使用后端方式打开浏览器
app = Application(backend="uia").start("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe")

time.sleep(3)

#开发打开其他博主的链接
sendMsg(topicNum)

topicNum是其他博主的互动区id,这里建议先获取参与这次评选的用户列表,再次提示,我们只做有限的评论,不要随意爬取随意评论给官方制造麻烦,可以看到其他玩家用爬虫死命得到处评论还多次评论,说明其代码并没有做好控制,只是为了发而发。

可以看到代码中会有很多的sleep,这是因为鼠标信号跟键盘信号 与 页面渲染会有时间差。如果页面还没渲染好就进行点击等操作只会操作失败。

框架比较差的点在于没有判断鼠标及键盘操作的结果是否符合。

模拟键盘滚动

    keyboard.send_keys('^T')
    time.sleep(3)

    keyboard.send_keys("https://bbs.csdn.net/topics/"+str(topicNum))
    keyboard.send_keys('VK_RETURN')
    time.sleep(10)


    mouse.scroll(coords=(10, 10), wheel_dist=-1)
    time.sleep(3)

1、使用键盘快捷键ctrl + T 打开新页面
2、输入其他博主的互动页面地址
3、回车结束进行跳转
4、等待10s(等待页面渲染)
5、向下滚动鼠标

打我们打开一个博主的互动页时:

需要滚动下鼠标才会出现底部的写回复我们目的是给其他博主写回复,让其回访(才不会真正给5星呢····)接下来可以模拟鼠标点击了。

官方文档附上的键盘键值:

SCROLLLOCK, VK_SPACE, VK_LSHIFT, VK_PAUSE, VK_MODECHANGE,
BACK, VK_HOME, F23, F22, F21, F20, VK_HANGEUL, VK_KANJI,
VK_RIGHT, BS, HOME, VK_F4, VK_ACCEPT, VK_F18, VK_SNAPSHOT,
VK_PA1, VK_NONAME, VK_LCONTROL, ZOOM, VK_ATTN, VK_F10, VK_F22,
VK_F23, VK_F20, VK_F21, VK_SCROLL, TAB, VK_F11, VK_END,
LEFT, VK_UP, NUMLOCK, VK_APPS, PGUP, VK_F8, VK_CONTROL,
VK_LEFT, PRTSC, VK_NUMPAD4, CAPSLOCK, VK_CONVERT, VK_PROCESSKEY,
ENTER, VK_SEPARATOR, VK_RWIN, VK_LMENU, VK_NEXT, F1, F2,
F3, F4, F5, F6, F7, F8, F9, VK_ADD, VK_RCONTROL,
VK_RETURN, BREAK, VK_NUMPAD9, VK_NUMPAD8, RWIN, VK_KANA,
PGDN, VK_NUMPAD3, DEL, VK_NUMPAD1, VK_NUMPAD0, VK_NUMPAD7,
VK_NUMPAD6, VK_NUMPAD5, DELETE, VK_PRIOR, VK_SUBTRACT, HELP,
VK_PRINT, VK_BACK, CAP, VK_RBUTTON, VK_RSHIFT, VK_LWIN, DOWN,
VK_HELP, VK_NONCONVERT, BACKSPACE, VK_SELECT, VK_TAB, VK_HANJA,
VK_NUMPAD2, INSERT, VK_F9, VK_DECIMAL, VK_FINAL, VK_EXSEL,
RMENU, VK_F3, VK_F2, VK_F1, VK_F7, VK_F6, VK_F5, VK_CRSEL,
VK_SHIFT, VK_EREOF, VK_CANCEL, VK_DELETE, VK_HANGUL, VK_MBUTTON,
VK_NUMLOCK, VK_CLEAR, END, VK_MENU, SPACE, BKSP, VK_INSERT,
F18, F19, ESC, VK_MULTIPLY, F12, F13, F10, F11, F16,
F17, F14, F15, F24, RIGHT, VK_F24, VK_CAPITAL, VK_LBUTTON,
VK_OEM_CLEAR, VK_ESCAPE, UP, VK_DIVIDE, INS, VK_JUNJA,
VK_F19, VK_EXECUTE, VK_PLAY, VK_RMENU, VK_F13, VK_F12, LWIN,
VK_DOWN, VK_F17, VK_F16, VK_F15, VK_F14

~ is a shorter alias for ENTER

鼠标点击

    mouse.click(coords=(1180, 1010))
    time.sleep(3)

鼠标点击事件采用的是坐标点击方式,即需要知道想要点击的写回复按钮的位置。
是的,这种方式很low,但有时候确实需要这种手动操作,接下来更low的是查找按钮的坐标的方式(我采用截图找像素的方式)

1、首先,从0,0的位置开始截图(蓝色圈即屏幕最左上角)

2、采用画图工具打开,定位到按钮的位置即当前按钮在屏幕的坐标位置了

输入评论

    keyboard.send_keys('# d求个五星回评 ')
    keyboard.send_keys('^ENTER')
    time.sleep(3)

输入评论内容后 ctrl+enter即回复啦

总结
pywinauto主要被用来测试桌面软件,网页方面确实还不够方便

python自动化框架:pywinauto实现博客之星自动化评论(代码片段)

...主的链接进行周而复始。今天咱不讲爬虫,讲python的自动化测试框架pywinauto如何实现模拟手动操作(相同的还有pyAutoGui这个库),制造一个有血有肉的回复机器,爬虫的方式太暴力了,除了反爬外,还... 查看详情

pywinauto处理ui自动化

pywinauto处理UI自动化Python的pywinauto模块来处理Windows控件的UI操作。 1.首先搭建pywinauto环境。 1).可以参考vncdotool-AcommandlineVNCclient安装python2.7.5,Twisted和PIL。 2).安装elementtree(elementtree-1.2.7-20070827-preview.win32.exe)和ctype... 查看详情

用pywinauto实现qt自动化(代码片段)

我试图使用pywinauto自动化一个QT应用程序,问题是pywinauto似乎无法点击或选择大多数对象,当它这样做,他们似乎是完全随机的那些我指定。即使使用诸如"点击输入"正确执行,但项目从未被实际点击。Pywinauto显然能够识别我试... 查看详情

windowsgui程序自动化之pywinauto

WindowsGUI程序自动化之pywinauto一.pywinauto的安装与配置  官方英文版文档网址:https://pywinauto.readthedocs.io/en/latest/index.html  >>>>>>待续   查看详情

如何离线安装python模块?比如windows下ui自动测试模块pywinauto

...不到独立安装包。先安装python2.7后,上pypi.python.org下载了pywinauto-0.5.4.zip,解压后,运行setup.py,报告Noez_setup.py,又搜了一下网上下载了个ez_setup.py,运行时候又提示urllib2.URLError:<urlopenerror[SSL:CERTIFICATE_VERIFY_FAILED]certificateverifyfai... 查看详情

python+pywinauto写自动化测试脚本时,怎么获取windows软件页面元素按钮啊?刚开始用这个不太明白?

...,VB6,VCL,简单的WinForms控件和大多数旧的旧应用程序MSUI自动化backend=uiaWinForms,WPF,Store应用程序,Qt,浏览器参考技术A这个问题很专业,百度相关贴吧里应该有高手的专业回答。 参考技术B上网查—下就知道了 参考技术C仙人... 查看详情

二pytest+selenium+allure实现webui自动化(代码片段)

上一章:一、webui自动化环境搭建pytest+allure+selenium_傲娇的喵酱的博客-CSDN博客_pytest+selenium+allurepytest二次开发相关文章:pytest框架二次开发之自定义注解_傲娇的喵酱的博客-CSDN博客pytest框架二次开发之机器人... 查看详情

python3+request接口自动化框架

首次书写博客,记录下写的自动化接口框架,框架比较简单,哈哈哈,算是记录下历程把!~~~一、本次框架由python3.6书写  1、准备代码环境,下载python3.6  下载地址:https://www.python.org/downloads  2、下载pycharm软件。二、... 查看详情

pywinauto客户端自动化---窗口进行截图(代码片段)

  做自动化过程中时长会遇到一些截图操作,那么在做客户端的时候,应该怎么进行截图呢?窗口截图在pywinauto中存在自带的截图函数 capture_as_image() 源码:defcapture_as_image(self,rect=None):"""ReturnaPILimageofthecontrol.SeePILdocument... 查看详情

使用python+flask开发博客项目,并实现内网穿透(代码片段)

前言Flask是一个使用python编写的轻量级Web框架,对比其他相同类型的框架而言,这个框架更加的灵活轻便。并且具有很强的定制性,用户可以根据自己的需求添加功能,有强大的插件库,这也是为什么这个框架... 查看详情

Pywinauto:如何调整活动窗口的大小

...【发布时间】:2021-12-2419:45:02【问题描述】:我正在尝试自动化一些Windows任务,我得到了所有打开的窗口的数据框,然后我添加了一些列以便在继续自动化之前进行一些验证。从set_focus()函数激活窗口后,我根本无法调整任何窗... 查看详情

python3实现自动化框架robotframework(最新)(代码片段)

python3.6及以上版本兼容RIDE1.7.3版本由于最近RIDE1.7.3的版本改进,RIDE这个版本对高版本的wxpython兼容很好,python3.6及以上版本都可以顺利运行RIDE为了减少步骤,我们后面的组件全部在线安装。1.当前我已安装好的python版本为3.6.52.... 查看详情

聊聊pc端自动化最佳方案-pywinauto(代码片段)

...好,我是安果!上一篇文章,聊到PC端的一种自动化方案:WinAppDriver聊聊PC端自动化最佳方案-WinAppDriver有小伙伴后台给我留言,说「 pywinauto」作为WinAppD 查看详情

python3简易接口自动化测试框架设计与实现实例2

目录  1、开发环境  2、用到的模块  3、框架设计?3.1、流程  3.2、项目结构  5、日志打印  6、接口请求类封装  7、Excel数据读取  7.1、读取配置文件  7.1、编写Excel操作类  8、用例组装  9、用例运行... 查看详情

python爬虫入门教程54-100博客园等博客网站自动评论器(代码片段)

爬虫背景爬虫最核心的问题就是解决重复操作,当一件事情可以重复的进行的时候,就可以用爬虫来解决这个问题,今天要实现的一个基本需求是完成“博客园“博客的自动评论,其实原理是非常简单的,提炼一下需求基本需求... 查看详情

python毕业设计基于django框架的个人博客系统的设计与实现毕设参考

开发概要开发语言:python;Python版本:3.8.7开发框架:Django;Django版本:4.x数据库:mysql;数据库版本:mysql8数据库管理工具:navicat10+开发工具版本:pycharm2020+20 查看详情

pywinauto桌面应用自动化01--安装和启动(代码片段)

...位元素的工具查看界面上的元素的相关属性,可用于自动化测试中元素的定位和识别等;1、网上推荐的inspect工具Spy++(定位元素工具(win32))Inspect(定位元素工具(uia))UISpy(... 查看详情

使用 pywinauto 自动化的 Windows 应用程序不会检测到 TreeView 中的元素,尽管这些元素有自己的特征

】使用pywinauto自动化的Windows应用程序不会检测到TreeView中的元素,尽管这些元素有自己的特征【英文标题】:ThewindowsapplicationautomatingusingpywinautodoesnotdetectelementsinsideaTreeView,despitetheelementshavethereowncharacteristic【发布时间】:2021-05-1... 查看详情