AppleScript - 执行 JavaScript returns 缺失值
AppleScript - do JavaScript returns missing value
下面的脚本用于点击按钮加载我们网站上的日期,然后获取该日期的值。
然后应该return那个日期值,稍后将在一些比较中使用。
但是,当我记录 doJavaStuff 和 emptyDate 时,它们都返回为“(*缺失值 *)”。
显示对话框 for emptyDate 也 returns "msng".
为什么 do JavaScript 的结果不是 returned?
我查看了多篇文章和来源并尝试了多种建议,但没有任何效果。
例如我尝试将 do JavaScript 的第二行设置为一个变量,然后 returning 该变量,但不知何故使 AppleScript 变量未定义。
我对 AppleScript 比较陌生,所以我可能遗漏了一些明显的东西。
global emptyDue, serviceDate, doJavaStuff
set emptyDue to " "
set doJavaStuff to " "
set serviceDate to "2021-11-30"
on isEmptyDue()
tell application "Safari" to tell document 1
set doJavaStuff to do JavaScript
"document.getElementById('trgUseNext').click(); #clicks button to load date.
document.getElementById('inspDate').value;" --gets the value of date
return doJavaStuff
end tell
end isEmptyDue
set emptyDate to isEmptyDue()
display dialog emptyDate
log doJavaStuff
log emptyDate
我能够使用恰好位于此 Whosebug 页面 (post-id
) 上的元素复制您的问题,使用您脚本的这个简化版本:
on isEmptyDue()
tell application "Safari" to tell document 1
set doJavaStuff to do JavaScript
"document.getElementById('post-id').value"
return doJavaStuff
end tell
end isEmptyDue
set emptyDate to isEmptyDue()
display dialog emptyDate
如您所述,return 值是“msng”。
问题似乎是 AppleScript 非常乐意在自己的行中只包含引号文本,并且也非常乐意运行 do JavaScript
没有脚本。也就是说,您提供的代码没有 运行 任何 JavaScript:它调用 do JavaScript
什么都不做,然后下一行是 AppleScript 忽略的文本字符串。
如果我将这些行组合成一行而不是两行,display dialog emptyDate
会在此 Whosebug 页面上显示元素 post-id
的预期 8 位值(通过查看源代码找到) .
on isEmptyDue()
tell application "Safari" to tell document 1
set doJavaStuff to do JavaScript "document.getElementById('post-id').value"
return doJavaStuff
end tell
end isEmptyDue
set emptyDate to isEmptyDue()
display dialog emptyDate
这很难追查,因为两个“错误”都没有提供明显的错误:do JavaScript
没有任何文本不是错误——相反,它 return 是一个神秘的字符串,“ msng”,我怀疑但不知道它代表“缺失”——一行中的字符串本身也不是错误。所以它看起来像是在做某事而不起作用,而不是什么都不做而不起作用。
下面的脚本用于点击按钮加载我们网站上的日期,然后获取该日期的值。
然后应该return那个日期值,稍后将在一些比较中使用。 但是,当我记录 doJavaStuff 和 emptyDate 时,它们都返回为“(*缺失值 *)”。 显示对话框 for emptyDate 也 returns "msng".
为什么 do JavaScript 的结果不是 returned?
我查看了多篇文章和来源并尝试了多种建议,但没有任何效果。 例如我尝试将 do JavaScript 的第二行设置为一个变量,然后 returning 该变量,但不知何故使 AppleScript 变量未定义。
我对 AppleScript 比较陌生,所以我可能遗漏了一些明显的东西。
global emptyDue, serviceDate, doJavaStuff
set emptyDue to " "
set doJavaStuff to " "
set serviceDate to "2021-11-30"
on isEmptyDue()
tell application "Safari" to tell document 1
set doJavaStuff to do JavaScript
"document.getElementById('trgUseNext').click(); #clicks button to load date.
document.getElementById('inspDate').value;" --gets the value of date
return doJavaStuff
end tell
end isEmptyDue
set emptyDate to isEmptyDue()
display dialog emptyDate
log doJavaStuff
log emptyDate
我能够使用恰好位于此 Whosebug 页面 (post-id
) 上的元素复制您的问题,使用您脚本的这个简化版本:
on isEmptyDue()
tell application "Safari" to tell document 1
set doJavaStuff to do JavaScript
"document.getElementById('post-id').value"
return doJavaStuff
end tell
end isEmptyDue
set emptyDate to isEmptyDue()
display dialog emptyDate
如您所述,return 值是“msng”。
问题似乎是 AppleScript 非常乐意在自己的行中只包含引号文本,并且也非常乐意运行 do JavaScript
没有脚本。也就是说,您提供的代码没有 运行 任何 JavaScript:它调用 do JavaScript
什么都不做,然后下一行是 AppleScript 忽略的文本字符串。
如果我将这些行组合成一行而不是两行,display dialog emptyDate
会在此 Whosebug 页面上显示元素 post-id
的预期 8 位值(通过查看源代码找到) .
on isEmptyDue()
tell application "Safari" to tell document 1
set doJavaStuff to do JavaScript "document.getElementById('post-id').value"
return doJavaStuff
end tell
end isEmptyDue
set emptyDate to isEmptyDue()
display dialog emptyDate
这很难追查,因为两个“错误”都没有提供明显的错误:do JavaScript
没有任何文本不是错误——相反,它 return 是一个神秘的字符串,“ msng”,我怀疑但不知道它代表“缺失”——一行中的字符串本身也不是错误。所以它看起来像是在做某事而不起作用,而不是什么都不做而不起作用。