这是我到目前为止所拥有的:
set chrome_clear_url to "chrome://settings/clearBrowserData"
set chrome_settings_url to "chrome:///settings"
tell application "Google Chrome" to quit
delay 1
tell application "Google Chrome" to launch
delay 1
tell application "Google Chrome" to activate
delay 2
tell application "Google Chrome" to open location chrome_clear_url
delay 2
tell application "Google Chrome"
execute front window's active tab javascript "document.getElementById('clear-browser-data-commit').click();"
end tell
delay 2
tell application "Google Chrome" to open location chrome_settings_url
delay 2
tell application "Google Chrome"
execute front window's active tab javascript "document.getElementById('reset-profile-settings').click()"
end tell
delay 2
return
这回复时缺少值:
execute active tab of window 1 javascript "document.getElementById('clear-browser-data-commit').click();"
--> missing value
如何通过AppleScript正确加载设置并重置浏览器?我想我也可以使用非Applescript解决方案,只要他们提高效率。
答案 0 :(得分:3)
你自己的答案肯定是去这里的方式。
但是,这个答案解释了为什么JavaScript交互不起作用;这里使用的技术 在其他情况下可能派上用场。
问题不在AppleScript代码中,而是在 JavaScript 代码中:
问题是chrome://settings/...
页面中的HTML源代码使用<iframes>
作为主要内容,因此直接使用document.getElementById()
访问其元素不起作用 - 您需要定位 iframe 元素的document
对象。
很遗憾,由于相关<iframe>
元素的网址chrome://settings-frame/settings
与封闭网页(settings
与settings-frame
)有不同的“域名”,出于安全原因,Chrome不允许您访问该框架的单独document
对象(同源策略);换句话说:document.getElementsByTagName('iframe')[1].contentDocument.getElementById('clear-browser-data-commit')
将不起作用。
但是,您只需直接加载<iframe>
网址,如以下代码段所示:
tell application "Google Chrome"
open location "chrome://settings-frame/clearBrowserData" # !! The *iframe* URL!
tell active tab of window 1 to execute javascript "
window.addEventListener('load', function() {
document.getElementById('clear-browser-data-commit').click();
});"
end tell
请注意对window
对象的load
事件使用侦听器,以确保仅在页面完全加载后才进行.click()
尝试 - 接近{{3} }}
答案 1 :(得分:2)
这种方法更直接,并且确认可行。
# reset Google Chrome with Applescript and Shell
tell application "Google Chrome" to quit
do shell script "rm -rf ~/Library/Application\\ Support/Google/Chrome/Default"