带有 Safari 10.1 的 applescript getInputByClass2

applescript getInputByClass2 with Safari 10.1

提问人:Kevin 提问时间:2/11/2017 最后编辑:Kevin 更新时间:2/24/2017 访问量:520

问:

自从上次系统更新以来,我每天运行以从 Safari 获取文本的 Applescripts 无法正常工作

它以前只能在 Safari 中使用,而不能在 Safari 预览中工作,我猜 Safari 预览系统现在被带到了 safari/

tell application "Safari"

    set DinfoGrab to do JavaScript "
document.getElementsByClassName(' field type-string field-Dinfo ')[0].innerHTML;" in tab 3 of window 1
end tell

出现此错误:

Safari 出现错误:无法使“ document.getElementsByClassName(' field type-string field-Dinfo ')[0].innerHTML;“ 转换为类型文本。

我该如何解决这个问题?谢谢。

更新:

这是与Chrome完美配合的东西:

tell application "Google Chrome"
        tell tab 3 of window 1 to set r to execute javascript "document.getElementsByClassName('field type-string field-Dinfo')[0].innerHTML;"
    end tell
变量 Safari AppleScript

评论


答:

0赞 pipwerks 2/24/2017 #1

没有看到完整的代码,我不能确定发生了什么。但是从您的函数名称来看-- --我假设您正在尝试获取 HTML 字段的值。如果这是真的,你应该使用而不是getInputByClass2<input>outPut.push(arr[i].value)outPut.push(arr[i].innerHTML)

至于第二位代码,如果 的值为 null,您的 JavaScript 没有任何错误处理。document.getElementsByClassName(' field type-string field-Dinfo ')[0]

var els = document.getElementsByClassName(' field type-string field-Dinfo ');
//set to value of [0].innerHTML if [0] exists, else empty string
var html = els.length ? els[0].innerHTML : ""; 
//return value to AppleScript
html; 

更新(对更新问题的回答)

在脚本编辑器中针对此 StackOverflow 页面运行以下脚本将返回正确的值(假设您设置了正确的窗口/选项卡编号)。如果此 StackOverflow 页面顶部的搜索字段为空,您将获得一个空字符串。如果输入术语(但未提交),然后运行 AppleScript,则将获得该字段的值。

tell application "Safari"
    set DinfoGrab to do JavaScript "
document.getElementsByClassName('js-search-field')[0].value;" in tab 1 of window 1
end tell

脚本中唯一的更改是窗口/选项卡编号、类名(更改为匹配 StackOverflow 页面),我用 .valueinnerHTML

我已经在最新版本的 Safari (10.0.3) 中进行了测试;如果这在您的 Safari 版本中不起作用,请确保指向正确的类名。如果此脚本确实适合您,则问题可能是由于您尝试搜索的页面上的某些内容造成的,可能与您正在获取的字段类型或不正确的类名有关。也许 Safari 的更新导致页面呈现方式不同,从而间接影响您的代码。<input>

评论

0赞 Kevin 2/24/2017
感谢您的回复,以前的脚本曾经工作了大约一年,我无论如何都尝试更改 .value,但后来我遇到了一个错误:无法将“ document.getElementsByClassName(' field type-string field-dsid ')[0].value;” 变成类型文本。
0赞 pipwerks 2/24/2017
我首先要检查的是document.getElementsByClassName('field type-string field-dsid ')[0]: 的typeof。至少这样你就会知道是否真的返回了任何有用的东西alert(typeof document.getElementsByClassName(' field type-string field-dsid ')[0])document.getElementsByClassName(' field type-string field-dsid ')[0])
0赞 Kevin 2/24/2017
我用相同的剪裁更新了脚本,正在与 Chrome 一起使用,我想这是我的 Safari 版本的问题。我也没有设法运行你的代码,我可能应该找一些时间来学习更多的JavaScript
0赞 Kevin 2/25/2017
感谢您的更新,表单和文本字段不是“.value”吗?您的脚本工作正常,以及我的脚本与我的另一台 Mac(使用 StackoverFlow 搜索)一起使用,但不在我的计算机上,我遇到错误 Safari 出现错误:无法制作“.....输入到文本中。,我也在运行 Safari 10.1 (12603.1.29) 我认为自 10.1 以来我就遇到了这个问题
0赞 pipwerks 2/25/2017
是的,用于表单元素。正如我在回答中提到的,我假设您正在抓取元素,因为您的函数被命名为 .如果你不是抓取元素,而只是抓取标准的 HTML 元素,比如 ,你会使用 .value<input><input>getInputByClass2<input><div>innerHTML