本人初学者,在使用pyautogui做一个可以在知乎自动复制评论并识别是否包含垃圾词汇的脚本
基本原理是:
提前截图知乎评论区一些固定的按钮,然后利用pyautogui来进行定位坐标
然后现在想要尝试利用os库来让脚本读取相对路径的文件
于是开始一边网上学一边测试
但遇到一个很奇怪的问题,我在导入os模块后,我提前截图好的图片,就无法使用pyautogui进行匹配了,甚至我恢复修改前的代码,也不能正常匹配了。
一定要重新截图保存到文件夹里,然后才能正常匹配。
想问问os模块是有什么特性吗?为啥导入os模块后会让我原来的图片失效了
原本可执行的代码如下:
import pyautogui
import time
import pyperclip
import keyboard
# 按p开始启动脚本
keyboard.wait('p')
# 打开浏览器
pyautogui.click(x=131, y=1055)
time.sleep(1)
while 1 == 1:
# 输入k退出循环,还没找到比较好的方法或函数来随时停止程序
if keyboard.is_pressed('k'):
break
# 寻找切换最新或默认,在屏幕中的坐标位置,并且进行点击
panduan = pyautogui.locateCenterOnScreen(r'D:\python\自动删评项目\测试截图位置\zuixin.jpg')
if panduan is None:
panduan = pyautogui.locateCenterOnScreen(r'D:\python\自动删评项目\测试截图位置\moren.jpg')
x1, y1 = panduan
pyautogui.click(x1, y1, duration = 0.5)
time.sleep(1)
x1, y1 = panduan
# 定位删除按钮所在位置,用于计算复制终点
# 计算复制内容的初始点
scx,scy = pyautogui.locateCenterOnScreen(r'D:\python\自动删评项目\测试截图位置\shanchu.jpg')
x2 = x1 - 582
y2 = y1 + 135
scx2 = scx + 493
scy2 = scy - 23
# 执行复制的动作,并转为字符串,并记录时间
for i in range(2):
pyautogui.moveTo(x2, y2, duration = 1)
pyautogui.dragTo(scx2, scy2, 1, button='left')
pyautogui.hotkey('ctrl', 'c')
neirong = pyperclip.paste()
now = time.localtime()
nowt = time.strftime("%Y-%m-%d-%H_%M_%S", now)
# 读取TXT里定义的敏感关键字,包含关键字的是需要删除的评论
f = open("D:\python\自动删评项目\测试用的读取关键字文档.txt")
while 1:
lines = f.readlines()
if not lines:
break
for line in lines:
line = line.strip()
if line in neirong:
zhixing = 1
break
else:
zhixing = 0
print(zhixing)
#f.close()
本来这是一段可以正常执行的代码,但只要我导入os模块后(如下部分代码),就不能执行了,哪怕我恢复到如上代码,也会导致
panduan = pyautogui.locateCenterOnScreen(r'D:\python\自动删评项目\测试截图位置\zuixin.jpg') 这一句无法成功返回坐标,一定得重新截图保存这张图片,才能跑通。(包括后面,只要是这个文件夹里用来匹配位置的图片,全都失效,全部得重新截图)
如下代码,即我修改后的代码
import pyautogui
import time
import pyperclip
import keyboard
import os
# 按p开始启动脚本
keyboard.wait('p')
# 打开浏览器
pyautogui.click(x=131, y=1055)
time.sleep(1)
while 1 == 1:
# 输入k退出循环,还没找到比较好的方法或函数来随时停止程序
if keyboard.is_pressed('k'):
break
# 寻找切换最新或默认,在屏幕中的坐标位置,并且进行点击
panduan = pyautogui.locateCenterOnScreen(r'D:\python\自动删评项目\测试截图位置\zuixin.jpg')
if panduan is None:
panduan = pyautogui.locateCenterOnScreen(r'D:\python\自动删评项目\测试截图位置\moren.jpg')
x1, y1 = panduan
pyautogui.click(x1, y1, duration = 0.5)
time.sleep(1)
x1, y1 = panduan
# 定位删除按钮所在位置,用于计算复制终点
# 计算复制内容的初始点
scx,scy = pyautogui.locateCenterOnScreen(r'D:\python\自动删评项目\测试截图位置\shanchu.jpg')
x2 = x1 - 582
y2 = y1 + 135
scx2 = scx + 493
scy2 = scy - 23
# 执行复制的动作,并转为字符串,并记录时间
for i in range(2):
pyautogui.moveTo(x2, y2, duration = 1)
pyautogui.dragTo(scx2, scy2, 1, button='left')
pyautogui.hotkey('ctrl', 'c')
neirong = pyperclip.paste()
now = time.localtime()
nowt = time.strftime("%Y-%m-%d-%H_%M_%S", now)
# 读取TXT里定义的敏感关键字,包含关键字的是需要删除的评论
file1 = os.path.abspath("测试用的读取关键字文档.txt")
with open(file1) as f:
# f = open("D:\python\自动删评项目\测试用的读取关键字文档.txt")
while 1:
lines = f.readlines()
if not lines:
break
for line in lines:
line = line.strip()
if line in neirong:
zhixing = 1
break
else:
zhixing = 0
print(zhixing)
#f.close()
有人愿意抽空解答一下嘛?为啥我将代码修改后,哪怕恢复了,图片也得重新截图才能重新跑起来呢?
这个识别与图片的大小像素有关,你可以将网页最大化,然后截图试试。如果要提高识别,可以用open cv的图像特征提取,然后定位,由pyautogui根据定位点击