目录
命令:pip3 install pyautogui==0.9.50
如果不指定版本,可能会在使用时报错: module 'pyscreeze' has no attribute 'locateOnWindow'
- import pyautogui
- while True:
- print(pyautogui.position())
例如,我定位到一个关键的复制按钮的位置:Point(x=830, y=200)
pyautogui.moveTo(x=830,y=200)
- pyautogui.click(1477,77,button='left')
- pyautogui.click(830,200,button='left')
- pyautogui.press('a')
- pyautogui.press('b')
pyautogui.hotkey('ctrl', 'v')
假设现在打开了很多网页,每个网页的固定位置有个工具按钮,单击之后在固定位置有个复制按钮,我们要依次遍历每个网页,点击工具按钮和复制按钮,并把文本收集汇总起来。
V1版本:
- import pyperclip
- import time
- import pyautogui
-
- def clickFirstPage():
- pyautogui.click(600, 25, button='left') #第1个网页页签的坐标
-
- def closeFirstPage():
- clickFirstPage()
- pyautogui.hotkey('ctrl', 'w')
-
- pageNum = 5 #网页的数量
- clickFirstPage()
- for i in range(0,pageNum):
- pyautogui.click(600, 77, button='left') # url的坐标
- pyautogui.hotkey('ctrl', 'c')
- pyautogui.click(5400, 1400, button='left') # 记事本的坐标
- pyautogui.hotkey('ctrl', 'v')
- pyautogui.press('enter')
-
- pyautogui.click(1477,77,button='left') #工具按钮的坐标
- time.sleep(0.1)
- pyautogui.click(830,200,button='left') #复制按钮的坐标
- time.sleep(0.1)
- pyautogui.click(5400,1400,button='left') #记事本的坐标
- pyautogui.hotkey('ctrl', 'v')
- pyautogui.press('enter')
- closeFirstPage()
V2版本:
如果获取系统的剪切板,则不需要记事本,直接print
- import pyperclip
- import time
- import pyautogui
-
- def clickFirstPage():
- pyautogui.click(20, 20, button='left') #第1个网页页签的坐标
-
- def closeFirstPage():
- clickFirstPage()
- pyautogui.hotkey('ctrl', 'w')
-
- stopPage = 'edge://favorites/?id=337'
-
- clickFirstPage()
- for i in range(0, 30):
- pyautogui.click(600, 77, button='left') # url的坐标
- pyautogui.hotkey('ctrl', 'c')
- time.sleep(0.1)
- txt = pyperclip.paste()
- if txt == stopPage:
- break
- print(txt)
- time.sleep(0.1)
- pyautogui.click(1477,77,button='left') #工具按钮的坐标
- time.sleep(0.1)
- pyautogui.click(830,200,button='left') #复制按钮的坐标
- time.sleep(0.1)
- txt = pyperclip.paste()
- print(txt)
- closeFirstPage()
V3版本:
在V1的基础上,新增预处理功能,以及用固定页面作为停止条件的功能。
预处理:先把所有网页刷几遍,让资源加载出来。
-
- import pyperclip
- import time
- import pyautogui
-
- def clickFirstPage():
- pyautogui.click(20, 20, button='left') #第1个网页页签的坐标
-
- def closeFirstPage():
- clickFirstPage()
- pyautogui.hotkey('ctrl', 'w')
-
- def copyOnePage(stopPage):
- pyautogui.click(600, 77, button='left') # url的坐标
- pyautogui.hotkey('ctrl', 'c')
- time.sleep(0.05)
- txt = pyperclip.paste()
- if txt == stopPage:
- return False
- pyautogui.click(1477, 77, button='left') # 工具按钮的坐标
- time.sleep(0.05)
- pyautogui.click(830, 200, button='left') # 复制按钮的坐标
- time.sleep(0.05)
- txt2 = pyperclip.paste()
- if txt2 != '' and 'm3u8' not in txt and txt !=txt2:
- print(txt)
- print(txt2)
- closeFirstPage()
- return True
-
- def init():
- clickFirstPage()
- for i in range(0, 60):
- pyautogui.hotkey('ctrl', 'tab')
- time.sleep(0.3)
- clickFirstPage()
-
-
- stopPage = 'edge://favorites/?id=337'
- init()
- for i in range(0, 30):
- if copyOnePage(stopPage) ==False:
- break
V4版本:
在V3的基础上,新增对于没有加载出来的网页,额外等待的功能
- import pyperclip
- import time
- import pyautogui
- def clickFirstPage():
- pyautogui.click(20, 20, button='left') #第1个网页页签的坐标
-
- def closeFirstPage():
- clickFirstPage()
- pyautogui.hotkey('ctrl', 'w')
- def copyOnePage(stopPage):
- pyautogui.click(600, 77, button='left') # url的坐标
- pyautogui.hotkey('ctrl', 'c')
- time.sleep(0.05)
- txt = pyperclip.paste()
- if txt == stopPage:
- return 0
- pyautogui.click(1477, 77, button='left') # 工具按钮的坐标
- time.sleep(0.05)
- pyautogui.click(830, 200, button='left') # 复制按钮的坐标
- time.sleep(0.05)
- txt2 = pyperclip.paste()
- if txt2 != '' and 'm3u8' not in txt and txt !=txt2:
- print(txt)
- print(txt2)
- return 1
- return 2
- def init():
- clickFirstPage()
- for i in range(0, 60):
- pyautogui.hotkey('ctrl', 'tab')
- time.sleep(0.3)
- clickFirstPage()
-
-
- stopPage = 'edge://favorites/?id=337'
- init()
- for i in range(0, 30):
- ret = copyOnePage(stopPage)
- if ret == 0:
- break
- elif ret == 1:
- closeFirstPage()
- else:
- time.sleep(1)
- copyOnePage(stopPage)
- closeFirstPage()
V5版本:
在V4的基础上,新增了监听按键功能,还新增了过滤url长度的功能。
-
- import pyperclip
- import time
- import pyautogui
- import pynput.keyboard
- from threading import Thread
-
- escFlag = False
-
- def on_press(key):
- # 监听按键
- if str(key) == 'Key.esc':
- global escFlag
- escFlag = True
-
- def clickFirstPage():
- pyautogui.click(20, 20, button='left') #第1个网页页签的坐标
-
- def closeFirstPage():
- clickFirstPage()
- pyautogui.hotkey('ctrl', 'w')
-
- def copyOnePage(stopPage):
- pyautogui.click(600, 77, button='left') # url的坐标
- pyautogui.hotkey('ctrl', 'c')
- time.sleep(0.1)
- txt = pyperclip.paste()
- if txt == stopPage:
- return 0
- pyautogui.click(1555, 77, button='left') # 工具按钮的坐标
- time.sleep(0.3)
- pyautogui.click(855, 200, button='left') # 复制按钮的坐标
- time.sleep(0.15)
- txt2 = pyperclip.paste()
- if txt != '' and txt2 != '' and 'm3u8' not in txt and txt !=txt2 and len(txt)<100:
- print(txt)
- print(txt2)
- return 1
- return 2
- def init():
- clickFirstPage()
- for i in range(0, 30):
- pyautogui.hotkey('ctrl', 'tab')
- time.sleep(0.5)
- if escFlag:
- return
- clickFirstPage()
-
-
- def downAllPage(stopPage):
- init()
- for i in range(0, 50):
- if escFlag:
- return
- ret = copyOnePage(stopPage)
- if ret == 0:
- break
- elif ret == 1:
- closeFirstPage()
- else:
- time.sleep(1)
- copyOnePage(stopPage)
- closeFirstPage()
-
- def main():
- stopPage = 'edge://favorites/?id=283'
- downAllPage(stopPage)
-
-
-
- t = Thread(target=main)
- with pynput.keyboard.Listener(on_press=on_press) as pklistener:
- t.start()
- t.join()
- pklistener.join()
这里的例子是一个网页,里面有4行6列的24个窗口,每个窗口点进去都是一个新网页,但是在url里面搜不到这24个新网页的相关信息。
于是我们可以按照固定间隔,依次点击每一个窗口,然后再把url收集下来。
-
- import pyperclip
- import time
- import pyautogui
- import pynput.keyboard
- from threading import Thread
-
- escFlag = False
-
- def on_press(key):
- # 监听按键
- if str(key) == 'Key.esc':
- global escFlag
- escFlag = True
-
- def downOnePage(x,y):
- pyautogui.click(x, y, button='left')
- time.sleep(1)
- pyautogui.click(600, 77, button='left') # url的坐标
- time.sleep(0.5)
- pyautogui.hotkey('ctrl', 'c')
- time.sleep(0.5)
- txt = pyperclip.paste()
- time.sleep(0.5)
- print(txt)
- pyautogui.click(40, 70, button='left') #返回
- time.sleep(0.5)
-
- def downAllPage():
- for x in range(0, 6):
- if escFlag:
- return
- downOnePage(x*300+200,600)
- pyautogui.click(1777, 222, button='left')
- pyautogui.scroll(-550)
- time.sleep(0.5)
-
- def main():
- downAllPage()
- downAllPage()
- downAllPage()
- downAllPage()
-
- def showPos():
- while True:
- print(pyautogui.position())
-
-
- t = Thread(target=main)
- with pynput.keyboard.Listener(on_press=on_press) as pklistener:
- t.start()
- t.join()
- pklistener.join()