我的Applescripts自从我上次更新系统以来,我每天都在运行Safari以获取来自Safari的文本
它曾经只在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;“into type text。
我该如何解决?感谢。
更新:
这与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
答案 0 :(得分:0)
如果没有看到完整的代码,我无法确定发生了什么。但是根据您的函数名称判断 - getInputByClass2
- 我假设您正在尝试获取HTML <input>
字段的值。如果是这样,您应该使用outPut.push(arr[i].value)
而不是outPut.push(arr[i].innerHTML)
至于第二位代码,如果document.getElementsByClassName(' field type-string field-Dinfo ')[0]
的值为null,则JavaScript没有任何错误处理。
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页面匹配),而我使用value
代替innerHTML
。
我已经在最新版本的Safari(10.0.3)中测试过;如果这在您的Safari版本中不起作用,请确保指向正确的类名。如果此脚本适合您,那么问题可能是由于您尝试搜索的页面上的某些内容,可能与您正在获取的<input>
字段的类型或类名不正确有关。也许Safari的更新导致页面呈现方式不同,这会间接影响您的代码。