自从习惯了写Python代码后,遇到需要重复操作的场景,都会第一时间想到用Python写个程序自动完成。这不,前几天就遇到一个批量截图的需求,就准备用Python来搞定,搜索找到一个可以控制鼠标和键盘的库Pynput

大概思路是装一个可以用快捷键截图的软件,然后用代码模拟键盘快捷键截图,之后鼠标点击翻页按钮,再截下一页,如此循环即可。逻辑很简单,但在实际写代码的时候遇到了一个问题,就是Mac系统上Pynput模块报错,报错内容如下:

import pynput
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pynput/__init__.py", line 40, in <module>
   from . import keyboard
......
 File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ctypes/__init__.py", line 392, in __getitem__
   func = self._FuncPtr((name_or_ordinal, self))
AttributeError: dlsym(0x7ff8574b4550, PyObjCObject_New): symbol not found

这个问题很奇怪,同样的代码在Windows上正常运行,但在Mac上就报错。搜了一圈解决方案,有人说是M1芯片的问题,但我用的是2019版的苹果本,并不是M1芯片。最后还是在github上的issues里找到了解决方案,问题出在依赖库pyobjc的版本上,最新的8.0版本不行,得用7.3,所以只需要把依赖库降低版本即可。

pip install pyobjc-framework-Quartz==7.3
pip install pyobjc-framework-Cocoa==7.3
pip install pyobjc-framework-ApplicationServices==7.3
pip install pyobjc-core==7.3

方案出处:https://github.com/moses-palmer/pynput/issues/420

Pynput完整文档:https://pythonhosted.org/pynput/

本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/221