python - 使用 tkinter 和 pyautogui 复制到剪贴板
问题描述
我正在开发一个自动化程序来审查/测试第三方应用程序中的内容。目前,我使用 pyautogui 突出显示和复制值(至少在我们可以访问应用程序数据库之前)和 tkinter 从剪贴板检索数据。
下面的脚本用于复制可以在屏幕上突出显示的内容(在脚本的#get manager 部分下)。
但是,当我导航到具有文本正文的部分(#QAR 测试 2)时,使用 pyautogui.hotkey("Ctrl","a") 突出显示所有内容并使用 pyautogui.hotkey("Ctrl","c")复制,似乎没有填充剪贴板(由于尝试打印分配给它的变量时出现错误消息)。
作为参考,我附上了目标文本的屏幕截图。不能将文本(特别是段落)复制到剪贴板吗?
#QAR 测试 2 后引发的错误消息是:
Traceback (most recent call last):
File "C:/Users/haudrxr/Downloads/PCA_5_5_18_QAR.py", line 92, in <module>
background_tm= copy_clipboard()
File "C:/Users/haudrxr/Downloads/PCA_5_5_18_QAR.py", line 10, in copy_clipboard
clipboard = Tk().clipboard_get()
File "C:\Users\haudrxr\AppData\Local\Continuum\anaconda3\lib\tkinter\__init__.py", line 804, in clipboard_get
return self.tk.call(('clipboard', 'get') + self._options(kw))
_tkinter.TclError: CLIPBOARD selection doesn't exist or form "STRING" not defined
...
#Get Manager Value
x=115
y=450
for i in range (10):
pyautogui.click(x, y)
time.sleep(1)
pyautogui.doubleClick(839, 567)
pyautogui.hotkey("Ctrl","c")
level=copy_clipboard()
y += 23
if level=="1":
pyautogui.mouseDown(750, 437,button="left",duration=1)
pyautogui.dragTo(1049, 437,1, button='left')
pyautogui.hotkey("Ctrl", "c")
staffname = copy_clipboard()
if len(staffname)>1:
team_tab.append(staffname)
print(team_tab)
else:
continue
team_tab = list(filter(None, team_tab)) # fastest
print(len(team_tab))
if len(team_tab)>2:
print("QAR Item 1: PASS")
else:
print("QAR Item 1: FAIL")
#QAR Test 2
if windll.user32.OpenClipboard(None):
windll.user32.EmptyClipboard()
windll.user32.CloseClipboard()
pyautogui.click(262, 162) # navigates to tab with text box
pyautogui.click(614, 314) #clicks in text box
pyautogui.hotkey("Ctrl", "a")
pyautogui.hotkey("Ctrl", "c")
background_tm= copy_clipboard()
time.sleep(10)
print(background_tm)
print("test1")
解决方案
根据@TerryJanReedy ,错误表示剪贴板中没有任何内容,甚至没有空字符串。
所以尝试先在其中添加一些东西。
尝试:
From time import sleep
from tkinter import Tk
try:
r=Tk()
r.clipboard_clear()
r.clipboard_append('testing ')
result = r.selection_get(selection="CLIPBOARD")
sleep(1)
except:
selection = None
推荐阅读
- react-native - React Native 与 expo 错误:useEffect 只读
- python - python 和 C++ 中的高效、DRY 双向查找
- python - 在 Python 中复制整个数据帧“x”次
- vba - 如何在 Word 中的 VBA 中进行数学运算?
- swift - 如何在自己的服务器上托管 SwiftUI 应用程序?
- flutter - 如何区分提供相同类的提供者
- javascript - 将数组中的特定属性映射到新数组中
- angular - 如何使用 Angular 2 或更高版本中的 aws amplify 刷新 aws-cognito 刷新令牌
- ios - 如何自动调整 AVPlayerLayer 的大小以在 Swift 的整个父视图中以全尺寸显示视频
- performance - 多人游戏服务器:从客户端到服务器的通信过多