gpt4 book ai didi

macos - 使用 AppleScript 从 Safari 保存打开网页的源代码

转载 作者:行者123 更新时间:2023-12-04 17:26:52 25 4
gpt4 key购买 nike

我如何编写一个脚本,将 Safari 中打开的网页保存到某个路径?

(该代码稍后将用于更复杂的脚本,因此使用系统事件的笨拙解决方案将无法使用。)通过谷歌搜索找到使用保存源功能的脚本让我非常不了解,因此对此的答案可能互联网上的第一个。我在下面粘贴了一些可能有用的东西。

可能有用的东西

Safari 的 AppleScript 字典中的这两个条目看起来很有用:

documentn [see also Standard Suite] : A Safari document representing the active tab in a window.

properties:

  • source (text, r/o) : The HTML source of the web page currently loaded in the document.
  • text (text, r/o) : The text of the web page currently loaded in the document. Modifications to text aren't reflected on the web page.
  • URL (text) : The current URL of the document.


然后:

savev : Save an object.

save specifier : the object for the command

  • [as text] : The file type in which to save the data.
  • [in alias] : The file in which to save the object.


一个几乎可以满足我要求的脚本

这个脚本确实保存了一个 HTML 文档,但与使用 Safari 的“导出为页面源”功能手动保存的文件相比,输出看起来很糟糕:
tell application "Safari"
(* Get a reference to the document *)
set myDoc to document of front window

(* Get the source of the page *)
set mySrc to source of myDoc

(* Get a file name *)
set myName to "Message_" & "0001" & ".html" -- the # will be modified later

tell application "Finder"
(* Get a path to the front window *)
set myPath to (target of front window) as string

(* Get a file path *)
set filePath to myPath & myName

(* Create a brand new file *)
set openRef to open for access (myPath & myName) with write permission

(* Save the document source *)
write mySrc to openRef

(* Close the file *)
close access openRef
end tell

这是我到目前为止所写的:

到目前为止我写的脚本
  • 这是我的第一次尝试:
    tell application "Safari"
    set pageToSaveSafariWindowIn to "Q:Ø:"
    set pageToBeSaved to front window
    save document pageToBeSaved as source in alias pageToSaveSafariWindowIn
    end tell

    以下是生成的日志:
    tell application "Safari"
    get window 1
    --> window id 6017
    save document (window id 6017) as source in alias "Q:Ø:"
    --> error number -1700 from window id 6017 to integer



    error "Safari got an error: Can’t make window id 6017 into type integer." number -1700 from window id 6017 to integer

  • 另一个尝试:
    tell application "Safari"
    save source of document in "Q:Ø:"
    end tell

    给出结果日志:

    error "Can’t get source of document." number -1728 from «class conT» of document

  • 最佳答案

    我发现了我认为更好/更简单的解决方案:

    tell application "Safari"
    activate
    set URL of document 1 to "http://www.apple.com"
    delay 5
    set myString to source of document 1
    end tell
    set newFile to POSIX file "/Users/myUsername/test.html"
    open for access newFile with write permission
    write myString to newFile
    close access newFile

    笔记:
  • 仅在网页完全加载后,“文档 1 的来源”似乎才填充了正确的源文本。因此需要延迟。也许您可以使用较低的延迟。
  • 有一些解决方案推荐使用 curl。我没有尝试过,但我认为对于动态生成的页面,这可能是有问题的。
  • 以上适用于 OSX 10.8.4。未针对其他版本进行测试。
  • 关于macos - 使用 AppleScript 从 Safari 保存打开网页的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7639512/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com