• python读取控制鼠标键盘


    目录

    一,工具

    二,鼠标

    1,实时显示鼠标位置

    2,控制移动鼠标

    3,控制点击鼠标

    三,键盘

    1,单键输入

    2,组合键输入

    四,实用demo

    1,多网页依次点击固定位置的按钮

    2,收集多个网页的链接


    一,工具

    pyautogui

    命令:pip3 install pyautogui==0.9.50

    如果不指定版本,可能会在使用时报错: module 'pyscreeze' has no attribute 'locateOnWindow'

    二,鼠标

    1,实时显示鼠标位置

    1. import pyautogui
    2. while True:
    3. print(pyautogui.position())

    例如,我定位到一个关键的复制按钮的位置:Point(x=830, y=200)

    2,控制移动鼠标

    pyautogui.moveTo(x=830,y=200)

    3,控制点击鼠标

    1. pyautogui.click(1477,77,button='left')
    2. pyautogui.click(830,200,button='left')

    三,键盘

    1,单键输入

    1. pyautogui.press('a')
    2. pyautogui.press('b')

    2,组合键输入

    pyautogui.hotkey('ctrl', 'v')

    四,实用demo

    1,多网页依次点击固定位置的按钮

    假设现在打开了很多网页,每个网页的固定位置有个工具按钮,单击之后在固定位置有个复制按钮,我们要依次遍历每个网页,点击工具按钮和复制按钮,并把文本收集汇总起来。

    V1版本:

    1. import pyperclip
    2. import time
    3. import pyautogui
    4. def clickFirstPage():
    5. pyautogui.click(600, 25, button='left') #第1个网页页签的坐标
    6. def closeFirstPage():
    7. clickFirstPage()
    8. pyautogui.hotkey('ctrl', 'w')
    9. pageNum = 5 #网页的数量
    10. clickFirstPage()
    11. for i in range(0,pageNum):
    12. pyautogui.click(600, 77, button='left') # url的坐标
    13. pyautogui.hotkey('ctrl', 'c')
    14. pyautogui.click(5400, 1400, button='left') # 记事本的坐标
    15. pyautogui.hotkey('ctrl', 'v')
    16. pyautogui.press('enter')
    17. pyautogui.click(1477,77,button='left') #工具按钮的坐标
    18. time.sleep(0.1)
    19. pyautogui.click(830,200,button='left') #复制按钮的坐标
    20. time.sleep(0.1)
    21. pyautogui.click(5400,1400,button='left') #记事本的坐标
    22. pyautogui.hotkey('ctrl', 'v')
    23. pyautogui.press('enter')
    24. closeFirstPage()

    V2版本:

    如果获取系统的剪切板,则不需要记事本,直接print

    1. import pyperclip
    2. import time
    3. import pyautogui
    4. def clickFirstPage():
    5. pyautogui.click(20, 20, button='left') #第1个网页页签的坐标
    6. def closeFirstPage():
    7. clickFirstPage()
    8. pyautogui.hotkey('ctrl', 'w')
    9. stopPage = 'edge://favorites/?id=337'
    10. clickFirstPage()
    11. for i in range(0, 30):
    12. pyautogui.click(600, 77, button='left') # url的坐标
    13. pyautogui.hotkey('ctrl', 'c')
    14. time.sleep(0.1)
    15. txt = pyperclip.paste()
    16. if txt == stopPage:
    17. break
    18. print(txt)
    19. time.sleep(0.1)
    20. pyautogui.click(1477,77,button='left') #工具按钮的坐标
    21. time.sleep(0.1)
    22. pyautogui.click(830,200,button='left') #复制按钮的坐标
    23. time.sleep(0.1)
    24. txt = pyperclip.paste()
    25. print(txt)
    26. closeFirstPage()

    V3版本:

    在V1的基础上,新增预处理功能,以及用固定页面作为停止条件的功能。

    预处理:先把所有网页刷几遍,让资源加载出来。

    1. import pyperclip
    2. import time
    3. import pyautogui
    4. def clickFirstPage():
    5. pyautogui.click(20, 20, button='left') #第1个网页页签的坐标
    6. def closeFirstPage():
    7. clickFirstPage()
    8. pyautogui.hotkey('ctrl', 'w')
    9. def copyOnePage(stopPage):
    10. pyautogui.click(600, 77, button='left') # url的坐标
    11. pyautogui.hotkey('ctrl', 'c')
    12. time.sleep(0.05)
    13. txt = pyperclip.paste()
    14. if txt == stopPage:
    15. return False
    16. pyautogui.click(1477, 77, button='left') # 工具按钮的坐标
    17. time.sleep(0.05)
    18. pyautogui.click(830, 200, button='left') # 复制按钮的坐标
    19. time.sleep(0.05)
    20. txt2 = pyperclip.paste()
    21. if txt2 != '' and 'm3u8' not in txt and txt !=txt2:
    22. print(txt)
    23. print(txt2)
    24. closeFirstPage()
    25. return True
    26. def init():
    27. clickFirstPage()
    28. for i in range(0, 60):
    29. pyautogui.hotkey('ctrl', 'tab')
    30. time.sleep(0.3)
    31. clickFirstPage()
    32. stopPage = 'edge://favorites/?id=337'
    33. init()
    34. for i in range(0, 30):
    35. if copyOnePage(stopPage) ==False:
    36. break

    V4版本:

    在V3的基础上,新增对于没有加载出来的网页,额外等待的功能

    1. import pyperclip
    2. import time
    3. import pyautogui
    4. def clickFirstPage():
    5. pyautogui.click(20, 20, button='left') #第1个网页页签的坐标
    6. def closeFirstPage():
    7. clickFirstPage()
    8. pyautogui.hotkey('ctrl', 'w')
    9. def copyOnePage(stopPage):
    10. pyautogui.click(600, 77, button='left') # url的坐标
    11. pyautogui.hotkey('ctrl', 'c')
    12. time.sleep(0.05)
    13. txt = pyperclip.paste()
    14. if txt == stopPage:
    15. return 0
    16. pyautogui.click(1477, 77, button='left') # 工具按钮的坐标
    17. time.sleep(0.05)
    18. pyautogui.click(830, 200, button='left') # 复制按钮的坐标
    19. time.sleep(0.05)
    20. txt2 = pyperclip.paste()
    21. if txt2 != '' and 'm3u8' not in txt and txt !=txt2:
    22. print(txt)
    23. print(txt2)
    24. return 1
    25. return 2
    26. def init():
    27. clickFirstPage()
    28. for i in range(0, 60):
    29. pyautogui.hotkey('ctrl', 'tab')
    30. time.sleep(0.3)
    31. clickFirstPage()
    32. stopPage = 'edge://favorites/?id=337'
    33. init()
    34. for i in range(0, 30):
    35. ret = copyOnePage(stopPage)
    36. if ret == 0:
    37. break
    38. elif ret == 1:
    39. closeFirstPage()
    40. else:
    41. time.sleep(1)
    42. copyOnePage(stopPage)
    43. closeFirstPage()

    V5版本:

    在V4的基础上,新增了监听按键功能,还新增了过滤url长度的功能。

    1. import pyperclip
    2. import time
    3. import pyautogui
    4. import pynput.keyboard
    5. from threading import Thread
    6. escFlag = False
    7. def on_press(key):
    8. # 监听按键
    9. if str(key) == 'Key.esc':
    10. global escFlag
    11. escFlag = True
    12. def clickFirstPage():
    13. pyautogui.click(20, 20, button='left') #第1个网页页签的坐标
    14. def closeFirstPage():
    15. clickFirstPage()
    16. pyautogui.hotkey('ctrl', 'w')
    17. def copyOnePage(stopPage):
    18. pyautogui.click(600, 77, button='left') # url的坐标
    19. pyautogui.hotkey('ctrl', 'c')
    20. time.sleep(0.1)
    21. txt = pyperclip.paste()
    22. if txt == stopPage:
    23. return 0
    24. pyautogui.click(1555, 77, button='left') # 工具按钮的坐标
    25. time.sleep(0.3)
    26. pyautogui.click(855, 200, button='left') # 复制按钮的坐标
    27. time.sleep(0.15)
    28. txt2 = pyperclip.paste()
    29. if txt != '' and txt2 != '' and 'm3u8' not in txt and txt !=txt2 and len(txt)<100:
    30. print(txt)
    31. print(txt2)
    32. return 1
    33. return 2
    34. def init():
    35. clickFirstPage()
    36. for i in range(0, 30):
    37. pyautogui.hotkey('ctrl', 'tab')
    38. time.sleep(0.5)
    39. if escFlag:
    40. return
    41. clickFirstPage()
    42. def downAllPage(stopPage):
    43. init()
    44. for i in range(0, 50):
    45. if escFlag:
    46. return
    47. ret = copyOnePage(stopPage)
    48. if ret == 0:
    49. break
    50. elif ret == 1:
    51. closeFirstPage()
    52. else:
    53. time.sleep(1)
    54. copyOnePage(stopPage)
    55. closeFirstPage()
    56. def main():
    57. stopPage = 'edge://favorites/?id=283'
    58. downAllPage(stopPage)
    59. t = Thread(target=main)
    60. with pynput.keyboard.Listener(on_press=on_press) as pklistener:
    61. t.start()
    62. t.join()
    63. pklistener.join()

    2,收集多个网页的链接

    这里的例子是一个网页,里面有4行6列的24个窗口,每个窗口点进去都是一个新网页,但是在url里面搜不到这24个新网页的相关信息。

    于是我们可以按照固定间隔,依次点击每一个窗口,然后再把url收集下来。

    1. import pyperclip
    2. import time
    3. import pyautogui
    4. import pynput.keyboard
    5. from threading import Thread
    6. escFlag = False
    7. def on_press(key):
    8. # 监听按键
    9. if str(key) == 'Key.esc':
    10. global escFlag
    11. escFlag = True
    12. def downOnePage(x,y):
    13. pyautogui.click(x, y, button='left')
    14. time.sleep(1)
    15. pyautogui.click(600, 77, button='left') # url的坐标
    16. time.sleep(0.5)
    17. pyautogui.hotkey('ctrl', 'c')
    18. time.sleep(0.5)
    19. txt = pyperclip.paste()
    20. time.sleep(0.5)
    21. print(txt)
    22. pyautogui.click(40, 70, button='left') #返回
    23. time.sleep(0.5)
    24. def downAllPage():
    25. for x in range(0, 6):
    26. if escFlag:
    27. return
    28. downOnePage(x*300+200,600)
    29. pyautogui.click(1777, 222, button='left')
    30. pyautogui.scroll(-550)
    31. time.sleep(0.5)
    32. def main():
    33. downAllPage()
    34. downAllPage()
    35. downAllPage()
    36. downAllPage()
    37. def showPos():
    38. while True:
    39. print(pyautogui.position())
    40. t = Thread(target=main)
    41. with pynput.keyboard.Listener(on_press=on_press) as pklistener:
    42. t.start()
    43. t.join()
    44. pklistener.join()

  • 相关阅读:
    如何使用 Jmeter获取登录token并设置为全局变量?
    Django笔记四十之运行Django环境的python脚本
    右击显示Pycharm打开教程
    JAVA经典百题之判断星期几
    牛客网AI面试题目
    centos安装mysql8
    8.查询数据
    疑难杂症集合(备忘)
    C++&QT day4
    敏感词检测库ToolGood.Words中IllegalWordsSearch类使用简介
  • 原文地址:https://blog.csdn.net/nameofcsdn/article/details/133191813