Chrome AppleScript可以访问浏览器选项卡并在其中执行JavaScript吗?

vnjpjtjt  于 2023-05-27  发布在  Go
关注(0)|答案(4)|浏览(270)

我很好奇AppleScript是否可以访问浏览器中的每个特定选项卡并在其中执行一些JavaScript。
有人有主意吗?

u1ehiz5o

u1ehiz5o1#

对于Google Chrome,请使用AppleScript Chromium Suite中的execute

execute  v:执行一段javascript。
执行说明符 :要在其中执行命令的选项卡。
javascript
text
:要执行的JavaScript代码。

示例:

tell application "Google Chrome"
    execute front window's active tab javascript "alert('example');"
end tell

可以在Safari中执行以下操作:

tell application "Safari" to do JavaScript "alert('example')" in document 1

对于其他浏览器,请在AppleScript编辑器上检查File -> Open Dictionary处的函数。

5hcedyr0

5hcedyr02#

下面的函数在Chrome最前面窗口的每个选项卡中运行JavaScript并连接输出。要在所有窗口中运行JavaScript,请将window 1替换为windows

xjss(){ osascript -e'on run {a}
    set o to ""
    tell app "Google Chrome" to repeat with t in (get tabs of window 1)
        tell t to set o to o & (execute JavaScript a) & linefeed
    end
end' -- "$1"; }

这只在最前面的标签中运行JavaScript:

xjs(){ osascript -e'on run {a}
    tell app "Google Chrome" to tell active tab of window 1 to execute JavaScript a
end' -- "$1"; }

以下是Safari的类似功能:

sjss(){ osascript -e'on run {a}
    set o to ""
    tell app "Safari" to repeat with t in (get tabs of window 1)
        tell t to set o to o & (do JavaScript a) & linefeed
    end
end' -- "$1"; }

sjs(){ osascript -e'on run {a}
    tell app "Safari" to tell document 1 to do JavaScript a
end' -- "$1"; }

自2018年发布的某些版本的Chrome以来,在运行execute JavaScript命令时,默认情况下会显示这样的错误:
78:98:执行错误:Google Chrome出现错误:通过AppleScript执行JavaScript已关闭。要打开它,请从菜单栏中转到View > Developer > Allow JavaScript from Apple Events。更多信息:中文(简体)
Safari在“Develop > Allow JavaScript from Apple Events”中有类似的首选项,在macOS 10.11.5版本(2016-05-16发布)中默认关闭。

e37o9pze

e37o9pze3#

最近,Google Chrome禁用了通过AppleScript执行JavaScript的功能。我很难找到一个参考链接,但在Chrome Canary v59中它不工作,并给出一条消息说它被禁用,我看到它在Chrome v57中仍然工作,所以它必须是非常新的。

oaxa6hgo

oaxa6hgo4#

你也可以在控制台中粘贴一些Javascript,我在Firefox上得到了这个。

property P_JAVA_SCRIPT : "/Users/username/Desktop/myscript.js"
tell application "Firefox"
    activate
    tell application "System Events" to tell process "Firefox"
        set the clipboard to (read P_JAVA_SCRIPT)
        keystroke "k" using {command down, option down} -- open console
        delay 1
        keystroke "v" using {command down} -- paste clipboard           
        keystroke return
        delay 3
        keystroke "i" using {command down, option down} -- close dev tools
    end tell
end tell

如果你想从JavaScript中获取返回值,那就麻烦多了!
在我的例子中,我在关闭开发工具之前使用了这个:set returnString to value of static text 1 of group 2 of group 2 of group 1 of group 1 of group 1 of UI element 1 of scroll area 1 of group 1 of group 1 of UI element 1 of scroll area 2 of group 1 of group 1 of group 1 of window 1
我使用了UI Browser.app,不幸的是不再维护。

相关问题