引言
之前写了一篇文章“Python魔法:使用PyAutoGUI优化学习过程的完美指南”(链接见文末)。这篇文章非常适用于想专心连续播放网课视频而不用手动点击下一篇的同学。但是这篇文章中的代码还存在一定的问题:
- 偶尔会出现卡在答题界面的问题
- 采用“重播”按钮作为视频播放完成的标志
- 出现错误的时候无法自动修正
问题定位及修复
卡在答题界面的问题
经检查,问题出在这段代码的位置:
# 寻找下一节的标志并点击
while True:
try:
next = location('next.png',0.9)
pyautogui.moveTo(next[0],next[1],duration=0.9)
pyautogui.click()
break
except:
log.write("未找到下一节按钮,向下滚动\n")
pyautogui.scroll(-750)
# 寻找下一节的标志并点击(这时处在答题界面)
while True:
try:
next = location('next.png',0.9)
pyautogui.moveTo(next[0],next[1],duration=0.9)
pyautogui.click()
break
except:
pyautogui.scroll(-750)
在点击完视频播放界面的“下一节”按钮之后,程序几乎是立马就点击了答题界面的“下一节”按钮。此时程序以为已经进入了下一节的播放按钮(实际上并没有),于是就去匹配视频播放按钮。但此时仍处在答题界面,所以必然是匹配不到,于是程序就会一直搜索,所以出现卡死的情况。
解决方法:在两个步骤之间添加:
time.sleep(5)
给网页留出加载的时间即可解决。
采用重播按钮进行检测的问题
这个不多解释,直接改为检测“任务点已完成”即可。
自动修正错误
# 点击播放按钮
while True:
error_time = 0
try:
playButton = location('playbutton.png',0.9)
log.write("找到播放按钮,执行点击操作\n")
pyautogui.moveTo(playButton[0], playButton[1], duration=0.8)
pyautogui.click()
break
except:
log.write("播放按钮未找到,等待3秒\n")
error_time =error_time+1
if(error_time>10):
log.write("等待时间过久,进入错误处理过程!")
time.sleep(3)
我在这里添加了错误超时检测。如果超过10次没有匹配到按钮的话,就进入错误处理的流程:
def error_handel():
# 寻找下一节的标志并点击
error_time2 = 0
while True:
time.sleep(1)
try:
next = location('next.png',0.9)
pyautogui.moveTo(next[0],next[1],duration=0.9)
pyautogui.click()
break
except:
pyautogui.scroll(-750)
error_time2 = error_time2+1
if(error_time2>10):
print("错误处理不了啦!")
sys.exit()
可以看到,如果在错误处理的部分仍然反复遇到错误的话,程序会停止执行。
在有以上的优化的情况下,我们就可以更加丝滑的连续观看网课而不用受到点击下一节的打扰了。
附上项目文件。如果不想在这里下载可以去github:https://github.com/LCHLCHLCHLCH/autoGUI下载。