提问人:Kevin 提问时间:2/11/2017 最后编辑:Kevin 更新时间:2/24/2017 访问量:520
带有 Safari 10.1 的 applescript getInputByClass2
applescript getInputByClass2 with Safari 10.1
问:
自从上次系统更新以来,我每天运行以从 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
答:
没有看到完整的代码,我不能确定发生了什么。但是从您的函数名称来看-- --我假设您正在尝试获取 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 页面),我用 .value
innerHTML
我已经在最新版本的 Safari (10.0.3) 中进行了测试;如果这在您的 Safari 版本中不起作用,请确保指向正确的类名。如果此脚本确实适合您,则问题可能是由于您尝试搜索的页面上的某些内容造成的,可能与您正在获取的字段类型或不正确的类名有关。也许 Safari 的更新导致页面呈现方式不同,从而间接影响您的代码。<input>
评论
alert(typeof document.getElementsByClassName(' field type-string field-dsid ')[0])
document.getElementsByClassName(' field type-string field-dsid ')[0])
value
<input>
<input>
getInputByClass2
<input>
<div>
innerHTML
评论