0

我被迫使用一个需要大量数据输入简单网络表单的软件,所以我设计了一个 AppleScript 以将文本文件作为输入,然后将内容键入 Safari,以便文本文件中的选项卡用于前进到 Web 表单中的下一个字段。我正在做一些字符串替换,因此我可以将文本文件中的换行符视为制表符,以提高文本文件的可读性。

我想通过从剪贴板击键来简化这一点,这可行,但字符串替换并没有按照应有的方式进行,我无法确定原因。在这一点上,我的解决方法是在复制之前用制表符手动查找/替换换行符,但这基本上与保存文件并将脚本指向它一样慢。

tell application "Safari"
    activate
end tell

set sourceString to (the clipboard) as text

set ASTID to AppleScript's text item delimiters
set AppleScript's text item delimiters to "\n"
set the lineList to every text item of sourceString
set AppleScript's text item delimiters to "\t"
set keystrokeString to the lineList as string
set AppleScript's text item delimiters to ASTID

tell application "System Events"
    keystroke keystrokeString as text
end tell

\t\n如果你把它放到 AppleScript Editor 中,它会编译成不可见的。当我使用以下文件从文件中读取时,字符串编辑(中间)部分的工作方式与宣传的一样:

set theFile to (choose file with prompt "Select a file to read:" of type {"txt"})
open for access theFile
set fileContents to (read theFile)
close access theFile

当我从剪贴板获取文本时,为什么字符串替换可能不起作用的任何想法?

4

3 回答 3

1

设置分隔符时使用 ASCII 字符函数应该可以工作。换行符是 ASCII 字符 10。所以 ie:set AppleScript's text item delimiters to ASCII character 10 应该可以工作。

于 2013-03-04T09:50:52.410 回答
0

在页面上的表单中切换通常很容易出错。您应该通过 id 识别每个表单并使用 javascript 填充表单。

tell application "Safari"
    set URL of document 1 to "http://www.google.com/"
    delay 3
    do JavaScript "document.getElementById('gbqfq').value = 'My Text'" in document 1
end tell
于 2013-03-04T12:16:57.480 回答
0

似乎换行符在将文本复制到剪贴板时被转换为回车,并且\n不会匹配它们。

\r但是,将它们都编译为不可见的字符,这有点烦人。

经过一些测试,看起来当您将文本文件保存到磁盘然后使用 AppleScript 读取它时,您必须将文件中使用的行结尾 LF 或 CR 与\nor匹配\r但是,在阅读复制到剪贴板的文本时,您必须始终匹配\r.

编辑:

其中许多字符都有 AppleScript 关键字。tab, linefeed, 和return都可以按原样使用。我的脚本现在看起来像这样:

set backspace to ASCII character 8

get the clipboard
set keystrokeString to (replacement of return by tab for the result)
set keystrokeString to (replacement of linefeed by tab for the result)
set keystrokeString to (replacement of tab by tab & backspace for the result)

tell application "System Events"
    keystroke keystrokeString as text
end tell

on replacement of oldDelim by newDelim for sourceString
    set oldTIDs to text item delimiters of AppleScript
    set text item delimiters of AppleScript to oldDelim
    set strtoks to text items of sourceString
    set text item delimiters of AppleScript to newDelim
    set joinedString to strtoks as string
    set text item delimiters of AppleScript to oldTIDs
    joinedString
end replacement

它现在还包括在每个制表符后击中的退格字符,因此如果文本未输入到已填充的字段中,则会在前进到后将其删除。

于 2013-03-04T13:30:18.097 回答