将高亮文本复制到剪贴板,然后使用剪贴板将其添加到列表中。

16

我正在尝试使用Python 3的pyautogui模块(Windows 10)自动化浏览器或文字处理器中的某些操作。

浏览器中有一段突出显示的文本。

text

以下脚本应该打印出突出显示的文本。

import pyautogui as pya

# double clicks on a position of the cursor
pya.doubleClick(pya.position())

list = []
# a function copy_clipboard() should be called here
var = copy_clipboard()
list.append(var) 
print(list)

输出应该是:

[text]

那么函数copy_clipboard()应该长什么样子呢? 谢谢你的帮助。


这听起来像是requests和beautifulsoup非常擅长的事情。或者至少如果你想自动化浏览器,可以使用selenium。 - SuperStew
谢谢您的回复。我希望该脚本也能在文本编辑器中运行。 - Stefan Smirnov
需要在文本编辑器上做些特殊的事情吗? - SuperStew
只需将一个突出显示的文本(从文本编辑器/处理器或浏览器)复制并分配给脚本中的变量。如果我手动执行此操作,它应该类似于Ctrl+C,Ctrl+V。 - Stefan Smirnov
研究使用Tkinterctypes模块。这是我过去使用的ctypes解决方案 - Dillon Davis
5个回答

25

大多数应用程序中,键盘组合键 Ctrl+C 可以复制所选内容,并且对你来说应该可以正常工作。在这方面,使用 pyautogui 很容易。要通过编程方式获取剪贴板内容,就像其他人提到的那样,你可以使用 ctypespywin32 或其他库来实现。在这里,我选择了 pyperclip

import pyautogui as pya
import pyperclip  # handy cross-platform clipboard text handler
import time

def copy_clipboard():
    pya.hotkey('ctrl', 'c')
    time.sleep(.01)  # ctrl-c is usually very fast but your program may execute faster
    return pyperclip.paste()

# double clicks on a position of the cursor
pya.doubleClick(pya.position())

list = []
var = copy_clipboard()
list.append(var) 
print(list)

1
那个解决方案确实有效。并且感谢您解释为什么脚本中应该有一个暂停 - 这对我来说不是很明显。 - Stefan Smirnov

5

使用tkinter的示例:

from tkinter import Tk
import pyautogui as pya

def copy_clipboard():
    root = Tk()     # Initialize tkinter
    root.withdraw() # hide the tkinter window
    pya.hotkey("ctrl", "c") # copy the text (simulating key strokes)
    clipboard = root.clipboard_get() # get the text from the clipboard
    return clipboard

copy_text = copy_clipboard()
print(copy_text)

Tk().clipboard_get() 返回剪贴板中当前的文本。


4

Soundstripe所发布的内容是有效的,但没有考虑到复制空值时先前已复制了一个值的情况。我添加了一行额外的代码来清除剪贴板,以便将空值保持为空值:

import pyautogui as pya
import pyperclip  # handy cross-platform clipboard text handler
import time

def copy_clipboard():
    pyperclip.copy("") # <- This prevents last copy replacing current copy of null.
    pya.hotkey('ctrl', 'c')
    time.sleep(.01)  # ctrl-c is usually very fast but your program may execute faster
    return pyperclip.paste()

# double clicks on a position of the cursor
pya.doubleClick(pya.position())

list = []
var = copy_clipboard()
list.append(var) 
print(list)

0

获取高亮/选定文本的另一种方法:

import subprocess
import shlex
selected_text = subprocess.check_output((shlex.split('xclip -out -selection')))

-1
你可以导入 pyperclip 并使用 pyperclip.copy('我想要复制的文本'),然后使用 pyperclip.paste() 将文本粘贴到任何你想要的地方。你可以在这里找到参考 链接

但我们假设文本在另一个程序中,可能是浏览器或类似的东西。那么你如何将它作为 pyperclip.copy 的参数传递呢? - Muzol
@Muzol 对不起,我之前表达不清楚。我不确定有没有好的方法来做到这一点。你最好使用Ctrl + C。 - Woody1193

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接