【问题标题】:Copy highlighted text to clipboard, then use the clipboard to append it to a list将突出显示的文本复制到剪贴板,然后使用剪贴板将其附加到列表中
【发布时间】:2019-01-01 11:17:38
【问题描述】:

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

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

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
  • 感谢您的回复。我希望该脚本也可以与文本编辑器一起使用。
  • 文本编辑器有什么特别需要做的吗?
  • 只需复制突出显示的文本(从文本编辑器/处理器或浏览器)并将其分配给脚本中的变量。如果我手动执行此操作,它应该看起来像 Ctrl+C、Ctrl+V。
  • 研究使用Tkinterctypes 模块。这是我过去使用过的ctypessolution

标签: python python-3.x pyautogui


【解决方案1】:

键盘组合 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)

【讨论】:

  • 该解决方案确实有效。感谢您解释为什么脚本中应该暂停 - 这对我来说并不明显。
【解决方案2】:

使用 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() 返回剪贴板中的当前文本。

【讨论】:

    【解决方案3】:

    张贴的音条是有效的,但在复制了先前的值时不考虑复制空值。我已经添加了一条清除剪贴板的附加行,因此空值副本保持空值:

    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)
    

    【讨论】:

      【解决方案4】:

      获得突出显示/选定文本的另一个选项:

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

      【讨论】:

        【解决方案5】:

        您可以导入pyperclip 并使用pyperclip.copy('my text I want copied'),然后使用pyperclip.paste() 将文本粘贴到您想要的任何位置。你可以找到参考here

        【讨论】:

        • 但是我们假设文本在另一个程序中,可能是浏览器或类似的东西。那么如何将它作为pyperclip.copy 的参数传递呢?
        • @Muzol 我很抱歉;我不清楚你想要什么。我不确定有没有好的方法可以做到这一点。使用 Ctrl + C 可能会更好
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多