python自动化框架:pywinauto实现博客之星自动化评论

Posted BBinChina

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python自动化框架:pywinauto实现博客之星自动化评论相关的知识,希望对你有一定的参考价值。

场景:
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实现博客之星自动化评论

python基于pywinauto实现PC客户端自动化

python基于pywinauto实现PC客户端自动化

用pywinauto实现QT自动化

pywinauto处理UI自动化

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