【问题标题】:Applescript alter text on clipboardApplescript 更改剪贴板上的文本
【发布时间】:2021-06-21 18:27:33
【问题描述】:

我编写了一个 AppleScript 来自动化我的工作设置,只需要最后的润色。我在脚本中将某些内容复制到剪贴板;我需要编辑我复制的文本以仅保留最后一行(最好不要打开实际的文本编辑器应用程序,因为这会使我的工作区变得混乱),然后将该行粘贴到 Google Chrome 浏览器中。


到目前为止,在我的脚本的最后一步中,我做了一些导致消息文本输出到终端的操作。然后我将终端中可见的文本复制到剪贴板,如下所示:

tell application "Terminal"
    tell front window
        set the clipboard to contents of selected tab as text
    end tell
end tell

现在我可以粘贴它,类似于

...
[I 15:03:31.259 LabApp] Serving notebooks from local directory: /workspace
[I 15:03:31.259 LabApp] The Jupyter Notebook is running at:
[I 15:03:31.259 LabApp] http://1fw5c518af9:1932/?token=5e6d97b348fsy734gd
[I 15:03:31.259 LabApp]   or http://88.0.0.1:1932/?token=5e6d97b348fsy734gd
[I 23:56:47.798 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 23:56:47.803 LabApp] 
    
    To access the notebook, open this file in a browser:
        file:///root/.local/share/jupyter/runtime-open.html
    Or copy and paste one of these URLs:
        http://1fw5c518af9:1932/?token=5e6d97b348fsy734gd
     or http://88.0.0.1:1932/?token=5e6d97b348fsy734gd

这总是以or *URL* 格式的文本结尾,例如在上面的示例中,它将是or http://88.0.0.1:1932/?token=5e6d97b348fsy734gd。这与上面的行由行分隔符和“或”之前的一些尾随空格分隔。

我需要做的是获取该 URL,启动 Google Chrome 浏览器并将其粘贴到那里。

打开谷歌浏览器应该很简单,下面的代码(来自这个tut)带你到Instagram:

tell application "Google Chrome" to activate

tell application "System Events"
   key code 37 using command down
   delay 0.5
   keystroke "https://www.instagram.com/instagram"
   delay 1
   key code 36
   delay 1

end tell

实际上我所需要的只是将剪贴板上的内容编辑为*URL*(在上面的示例中,只是http://88.0.0.1:1932/?token=5e6d97b348fsy734gd)。之后,我可以从剪贴板(在教程中输入 Instagram)粘贴它。


在尝试了下面@user3439894 的可爱回答后,我发现情况有点复杂:

  1. 在结尾后有不可预知的空白行“” 链接。
  2. 我也想知道最后是否有空格 还有

我已经知道http://88.0.0.1 的形式(它总是这样)所以有没有办法搜索它,然后用后面的链接抓住它? (如果能够用“ ”或换行符分隔结尾,那就太好了)

编辑 2: 如果http://88.0.0.1... 出现多次,我们希望只选择这些网址中的一个 - 它们通常可能相同,但选择最后一个 是最安全的。

【问题讨论】:

  • @user3439894 完成。抱歉,老实说,我通常只是手动打开浏览器中的最后一个链接(所以我什至没有注意到上面的链接)。需要明确的是,终端中过去有多少文本将被包含在其中有点不可预测,因此最可靠的解决方案是将最后一次出现的 http://88.0.0.1... 作为正确的 URL。事实上,倒数第二个 URL 似乎也不错(如上面我的复制和粘贴示例所示),但之前的 URL 也可能包含在 contents of selected tab 中,具体取决于终端屏幕的大小。
  • 我已更新我的答案以检索以 http://88 开头的最后一个 URL

标签: macos automation applescript automator


【解决方案1】:

我需要做的是获取该 URL,启动 Google Chrome 浏览器并将其粘贴到那里。

&

这总是以or *URL* 格式的文本结尾,例如在上面 例如它将是or http://88.0.0.1:1932/?token=5e6d97b348fsy734gd。这是分开的 从上面的行由行分隔符加上一些尾随空格 在“或”之前。

&

如果http://88.0.0.1... 出现多次,我们希望 只选择这些 URL 中的 一个 - 它们通常可能是 相同,但选择 last 是最安全的。

如果您尝试做的是从 所选标签contents 中获取最后一个以 http://88 开头的 URL Terminal 中的 front window,那么这里有一种不使用剪贴板的方法,在 Google Chrome 中打开它,也可以这样做无需使用 UI 脚本

换句话说,无需更改剪贴板上的文本或击键 URL,因为您只需告诉 Google ChromeURL 使用什么

示例 AppleScript 代码

tell application "Terminal" to ¬
    set theTextFromTerminal to ¬
        the contents of ¬
            the selected tab of ¬
                the front window ¬
                    as text

set theURL to ¬
    the last paragraph of ¬
        (do shell script ¬
            "grep -o 'http://88.*$' <<< " & ¬
            theTextFromTerminal's quoted form & ¬
            "; exit 0")

if theURL is "" then return
if theURL does not start with ¬
    "http://88." then return

tell application "Google Chrome"
    activate
    delay 1
    if exists front window then
        make new tab at ¬
            end of front window ¬
            with properties {URL:theURL}
    else
        set URL of ¬
            the active tab of ¬
                (make new window) to theURL
    end if
end tell

注意:示例 AppleScript 代码 就是这样,并且没有任何包含的错误处理不包含任何适当的额外错误处理。用户有责任根据需要或需要添加任何错误处理。查看AppleScript Language Guide 中的try statementerror statement。另请参阅Working with Errors。此外,在适当的情况下,可能需要在事件之间使用delay 命令,例如delay 0.5延迟设置得当。

【讨论】:

  • 感谢您的精彩回答。事实证明情况有点困难:当我尝试paragraphs of (the clipboard as text) 时,我发现在最终链接之后有不可预测的空行数量""。我已经知道http://88.0.0.1 的形式(它总是这样)所以有没有一种方法可以搜索它然后抓住后面的链接的其余部分? (我也想知道结尾是否也可能有空格 - 能够用“”换行符分隔结尾会很棒)
  • (不幸的是,请注意http://1fw5c518af9:1932/... 是一个死链接 - 我们需要http://88.0.0.1...。但它始终是 88.0.0.1)
  • @Vainmonde De Courtenay,我更新了 code 以绕过 剪贴板 并获取 contents Terminalfront windowselected tab并用grep处理得到目标URL并打开谷歌浏览器
  • 谢谢!最后一个并发症:似乎 URL http://88.0.0.1... 在复制到剪贴板的文本中出现了不止一次。目前我从theURL(在你的脚本中)得到的输出似乎是"http://88.0.0.1...http://88.0.0.1...",因为它似乎捕获了这两种情况——最好只得到一个(最好是最后一个,以防万一出于某种奇怪的原因太多)过去的东西从终端复制到剪贴板)。
  • 我也不确定您使用的 grep 是否会在末尾删除尾随空格(当我尝试使用它时,我似乎得到了 "http://88.0.0.1... ")但您可能已经认识到我是不确定这是否会降低 Chrome 中 URL 的有效性。 (链接仍然有效)
猜你喜欢
  • 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
相关资源
最近更新 更多