【问题标题】:Applescript: how to "tell" an app in the background?Applescript:如何在后台“告诉”应用程序?
【发布时间】:2018-06-03 17:37:03
【问题描述】:

我正在使用 Chrome 获取由 javascript 生成的网页的 HTML。执行所有这些操作的 applescript 需要每 2 分钟运行一次。一切都运行良好,除了我显然需要 Chrome 完全在后台执行此操作。我的脚本包含以下对 Chrome 的使用(以及设置 theTab 的块,这似乎不会导致 Chrome 出现在前面):

set URL of theTab to theURL
set isLoading to (loading of theTab)
execute front window's active tab javascript javascriptLocation
set theSource to execute front window's active tab javascript "document.documentElement.outerHTML"

把这条线:

tell application "Finder" to set visible of process "Google Chrome" to false

在上述每一行之后,要么根本没有隐藏,要么 Chrome 在屏幕上闪烁然后消失。我觉得这很让人分心。

有没有办法让应用程序在后台可靠且永久地运行?或者,如果失败了,是否有一种不可见的方式让 javascript 在服务器端执行,以便 applescript 可以获取其生成的源代码?

Chrome 66.0.3359.181 在 Mac OS 10.11.6、Applescript 2.5 上运行。

【问题讨论】:

  • 如果你想要的只是 HTML,为什么不使用 CURL 来获取呢?或者编写某种简单的工具? (也许我不明白为什么你需要一个成熟的 GUI 应用程序来完成这里的工作。)
  • 或者如果你想运行无头 JavaScript,试试 PhantomJS:phantomjs.org
  • 我不确定这一点,因为除了使用它之外,我几乎从不对网络做任何事情,但我很确定我需要在服务器端执行 javascript。我尝试了各种方法(我现在不记得了,这是几个月前的事了)来实现这一点,发现 Chrome 是唯一有效的方法。你提到的工具可以吗?
  • 感谢 PhantomJS 的建议,没听说过无头模式。事实证明 Chrome 也可以在命令行模式下无头运行,并且有一个选项 (--dump-dom) 可以完全按照我的意愿运行。我的代码现在更短、更简洁,而且我不必让 Chrome 24/7 运行,就可以获取我的 HTML!非常感谢:-)
  • 太棒了!您应该回答自己的问题,并且在 48 小时内您可以接受您的回答。我认为这对其他人可能有用。

标签: background applescript


【解决方案1】:

以下不是我发布的问题的答案,但它我试图解决的问题的答案,这就是我发布问题的原因。

正如我的问题所述,我需要掌握一些 javascript 在网站上生成的 HTML(这不在我的控制范围内)。由于网站上的 CORS 限制,我无法进行客户端抓取。我尝试了here 列出的跨域工具,但无法让它们工作。

所以我使用 Chrome 的 applescript 命令execute,首先执行 javascript(生成 HTML),然后第二次使用 document.documentElement.outerHTML 获取 HTML。但是全天每 2 分钟在屏幕上闪烁一次 Chrome 让我很头疼。

原来 Chrome 也可以在headless mode 中运行,从命令行,并且恰好有一个选项来运行 javascript 并返回生成的 HTML!

所以我的代码变得简单多了,我不必一直在我的应用程序列表中添加 Chrome。我是快乐的编码员:-)

这是让我获得在我需要的网站上生成的 HTML 的一行代码:

set theSource to (do shell script ((quoted form of POSIX path of googlePath) & " --headless --dump-dom " & theURL))

再次感谢@matt。我从来没有听说过无头模式,如果没有你对 PhantomJS 的建议,我永远也不会发现这个!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多