能否使用time.sleep()实现pyautogui函数的无限循环?新手Python脚本执行异常求助
嘿,我来帮你排查这个问题~
首先,你说加了while True循环后脚本完全没反应,得终止内核才能停,大概率是这几个原因:
1. 循环启动前没给足切换窗口的时间
你原来的代码在循环外有个延迟用来切换LinkedIn页面,但修改后把延迟放进了循环里——脚本一启动就直接进入循环,先睡2秒,这时候你可能还没来得及切到LinkedIn页面,鼠标就已经开始往固定坐标跑了(说不定跑到你的IDE窗口上了),看起来就像没执行一样。
2. 固定坐标的稳定性问题
LinkedIn的按钮位置会跟着窗口大小、屏幕分辨率、页面滚动变化,硬写死坐标很容易失效,比如你滚动页面后,按钮位置变了,脚本点空了,自然看起来没效果。
修正后的基础版本代码
先把最核心的循环问题解决,保证脚本能正常跑起来:
import pyautogui from time import sleep # 全局设置每个pyautogui操作后的延迟,只需要设置一次 pyautogui.PAUSE = 2.5 # 给你5秒时间切换到LinkedIn的连接请求页面 sleep(5) while True: try: # 执行你的点击动作 pyautogui.moveTo(1171, 458) pyautogui.click() pyautogui.moveTo(1123, 403) pyautogui.click() # 额外加1秒延迟,避免操作太频繁被LinkedIn限制 sleep(1) except KeyboardInterrupt: # 按Ctrl+C就能正常退出,不用强制终止内核 print("脚本已手动终止") break
更靠谱的优化方案:用图像识别代替固定坐标
固定坐标太容易失效了,建议用pyautogui的图像识别功能定位按钮。你可以把LinkedIn的「更多」按钮(三个点的那个)和「取消请求」按钮分别截图保存成more_btn.png和cancel_btn.png,然后用下面的代码:
import pyautogui from time import sleep pyautogui.PAUSE = 2.5 sleep(5) # 需要先安装opencv-python:pip install opencv-python while True: try: # 定位「更多」按钮,confidence是匹配度,0.8足够识别 more_button = pyautogui.locateOnScreen('more_btn.png', confidence=0.8) if more_button: pyautogui.click(more_button) # 定位「取消请求」按钮 cancel_button = pyautogui.locateOnScreen('cancel_btn.png', confidence=0.8) if cancel_button: pyautogui.click(cancel_button) else: print("没找到取消请求按钮,滚动页面找下一个~") pyautogui.scroll(-200) # 向下滚动页面 else: print("找不到更多按钮啦,应该是没有待取消的请求了!") break sleep(1) except KeyboardInterrupt: print("脚本已手动终止") break
这样不管页面怎么滚动、窗口大小怎么变,只要按钮截图没问题,脚本就能准确找到并点击,稳定性高很多~
内容的提问来源于stack exchange,提问作者mvinegret
相关产品推荐
相关产品推荐

