如何自动保存网页?如何自动保存网页?(How to automate saving webpages

2019-05-12 13:47发布

我需要归档几百网页中的什么浏览器调用“另存为,完整”的作风,这意味着他们保存的页面本身的HTML文件,一个完整的需要正确渲染页面的其他文件,如CSS文件夹一起, JS和图像文件。 这允许浏览的网页离线面色不变时在线显示。

下面是我试过的方法和与每个问题:

  • 在Firefox手工工艺

    • 链接下一个页面,右键点击。 键入“A”为“保存链接位置”到目标URL复制到剪贴板。
    • 点击链接进入页面。
    • 键入“ALT-FA”的“网页另存为”。 如果尚未选择,将“保存类型”为“网页,完整”。
    • 如果不是已经存在,把光标在“文件名”。 键入“CTRL-插入”粘贴剪贴板,包含当前页面的URL。
    • 将光标移动到该URL的末尾,然后移回,直到它到达最后一个“/”。 从那里选择左边选择URL的路径部分。
    • 按“删除”,从URL中删除路径,只留下文件名。
    • 在对话框中的键盘或“确定”按钮,按“Enter”键。
    • 该页面现已保存。 通过点击链接下页重复此过程。 (这是假设每一页都有一个“下一步”链接,这是我归档页面真实的。如果是不正确的,那么将是要回页面所有链接,并点击列表的额外步骤下一个从那里。)

    这是相当繁琐的做了一遍又一遍。 这是我想这个过程自动化。

  • iMacros的 。 这种重复任务的正是宏是。 我在Web浏览器类似的任务以前用过的iMacros的,但并没有在很长一段时间使用它。 我重新安装了它,想出了如何再次使用它,并写了一或两行的宏保存当前页面的URL的文件名。 然后,当我试图运行它,iMacros都告诉我, SaveAs命令不是在提供免费版本,我需要加紧$ 100的版本(有30天免费试用)来获得这种能力。 我没有留下深刻印象与我会在软件的最新版本看到,并发现它是笨重和不良记录。 所以,我宁愿去寻找其他的解决方案。

  • wget的 。 这是非常酷。 维基百科将其描述为“检索从Web服务器内容的计算机程序。” 这是新的给我,并花了一段时间来弄清楚。 主要是标榜为一个Unix程序,它也可用于Windows,它只是一个很小的可执行文件,无需安装。 我学会了足以让它下载了几个测试页面,但我去的时候,我需要存档的页面,它并没有对他们的工作。 我发了电子邮件给wget的邮件列表有关的问题,并正在等待,看看我能与一些帮助看着办吧。 (链接的电子邮件有我用wget命令行,包括页面我要存档,随着页面的样子在线和被保存通过Wget的后附加的图像文件的URL。)

    编辑:作为一个多星期后,出现了wget的邮件列表上没有回答。

  • 。 虽然这并不表示它是用于构建宏,但“测试案例”。 ,它看起来像一个更高质量的宏系统比iMacros的。 所以,我尝试了一下。 但是我发现,它不记录一切,我需要在程序中做手工工艺在Firefox上面。 例如,当我右键单击的链接,输入“A”来存储所链接的URL,硒没有添加任何的算法,它被记录。 下面的链接,当我保存的页面后,再硒什么也没做。 所以,虽然它看起来像高质量的软件,它似乎不具备的能力,我需要,除非我误解的东西。

所以我难倒。 我不打算这样做的手工工艺几百倍。 所以,我需要找到一种方法来自动执行它。 我怎样才能做到这一点?

Answer 1:

wget的是下载的网站非常好,非常快的工具, 如果它的作品,我建议你使用它。 但是 ,设计它仅适用于普通的HTML页面(例如维基百科或计算器)。 由于它不使用浏览器并不能渲染或执行JavaScript它往往不能与更复杂的网站。

如果wget的失败,最好的办法是kantu:正如我提到我的其他答案 , kantu再加上真正的用户模块可以自动完成这一任务。 你需要在专门研究的命令是XClick尤其的xtype触发,你需要的所有按键。



Answer 2:

我已经接受蒂姆Vanderzeil的答案,因为他指示我,我需要这个工具。 现在我想分享我与他给我做。 该解决方案是唯一的半自动化因为Kantu的问题,但它是距离远,比试图手工做这一切更好。 我张贴这种既在这里分享我学到的东西,看看是否有人能提供改进,包括一个解决方案,即防止全自动化的问题。

首先,我要提到的技术,这是有趣的一些背景。 Kantu ,特别是其扩展XModules (这是我所需要的这个项目),是相当新。 该公司,这使得它们在创立于2016年 ,并Kantu是在2017年9月公布 。 但是,他们的历史比更深刻,因为它的创始人包括马蒂亚斯·罗斯 ,原开发商iMacros的 。 Kantu是一个不同的实施另一种工具我在我的问题,提到的硒 。 所以这是在浏览器自动化这个深奥的领域很多交叉授粉。

很多人一直在问在计算器上很长一段时间如何自动网页的储蓄,如1 , 2 , 3 , 4 , 5 ,和6 。 答案都不在我看来是所有的帮助。 这是一个有点古怪,因为所有的浏览器有这样的能力,所以必须要一些模块漂浮某处这一点,所以我不知道为什么我不能只在PHP中调用一个函数它。 链接为问题#5上面说,通过“出现在浏览器的Webkit ”,但我们知道这并没有导致任何地方我还非常有用。

因此,在此期间,直到我发现PHP函数,我必须把我的Web浏览器变成机器人去做。 我公司开发下面的代码为付费墙后面几电子书,我有一个合法的帐户,并希望保留以供离线使用,并且不提供为PDF格式。 我确定两种方式,我可以下载的网页与Kantu:

  • 我按摩的内容页面抽取所需的URL表的HTML,并把它们放到CSV文件。 这可以通过Kantu的命令读取csvRead 。 该URL传递给命令open打开页面,然后命令XType发送Ctrl-SAlt-FA )告诉浏览器保存网页。 XType再次使用输入文件名保存为(在最后的URL的一部分“\”),以及最终XType发送Enter结束浏览器的另存为对话框。 循环这一点,这本书被保存。 该循环可以使用标签来完成任宏内部和指挥gotoLabel ,或宏可以写做一个页面和循环可以Kantu的GUI来完成。

  • 或者,我可以使用每个页面上的链接来进入下一个页面。 这是我在我的问题描述的过程。 我第一次用Kantu的录音过程中得到下一个页面链接的标识,并用其作为数据的代码为宏以下(特别是作为命令的“目标” XClickclick )。 我启动Kantu第一网页和宏使用命令XClick右键点击下页的链接,然后XType为“A”发送到浏览器,告诉它该链接的URL复制到剪贴板。 那么表彰click点击打开页面的链接,剩下的是一样的前面的方法。 在这里,我使用的下一个页面链接获得的URL,而不是一个CSV文件。

现在,我提到,我们在Kantu防止这种被完全自动化的一个问题。 该过程的最后一步,发送Enter到浏览器以结束另存为对话框,是片状的,原因不明。 有时工作,有时对话框只是坐在那里,要求我按Enter自己允许进程继续前进到下一个网页。 这是乏味的,意思是我需要参与这一进程,而不是留在自己的运行。 于是,并不完美,但一大堆不必做的程序的所有其余手动为好,这将是不可能的了几百页的更好。

XModules的免费版本,每次运行25个命令的限制。 通过该限制是有一个一次性收费$ 50 。 这很可能是值得的,如果我可以让自身的进程中运行。 但是,因为我总得去照看它,我目前通过点击Kantu的运行宏Play macro为每个页面按钮以及留意,当我需要按Enter

我已经发布了关于Enter问题和Kantu论坛其他一些问题。 他们的团队已经非常敏感和乐于助人。 我希望我或者他们或有人读这可以找出一个解决方案。 在此期间,半自动化的过程是聊胜于无。

上述两种方法之间,这仅仅是第二个,利用下页链接获得的URL,可以在没有一个循环运行,即与手动按下Play macro的每一页。 所以这是我一直在使用,现在的人。 该代码有25相当不雅重复Ctrl-Left S作为令人惊讶的情况下的一种变通方法Home在关键XType的命令为重复的词汇量,以及不存在(据我发现)按键。

这里是Kantu码,在JSON:

{"Name": "SavePageAsComplete",
 "CreationDate": "2019-01-03",
 "Commands":
  [{"Command": "comment",
    "Target":  "Macro for Kantu with XModules. Based on demo macros DemoXClick and 
         DemoXType and docs https://a9t9.com/kantu/docs/xclick and https://a9t9.com/kantu/docs/xtype. 
         The target in the XClick and click commands are what was obtained from 
         attempting to record this macro on the website, which resulted in only an open 
         command and two identical click commands with that target.",
    "Value":   ""
    },
   {"Command": "comment",
    "Target":  "Set play speed to 0.3 seconds. (See Kantu manual section 'Setting the right macro replay speed'.)",
    "Value":   ""
    },
   {"Command": "store",
    "Target":  "medium",
    "Value":   "!replayspeed"
    },
   {"Command": "bringBrowserToForeground",
    "Target":  "",
    "Value":   ""
    },
   {"Command": "comment",
    "Target":  "Right-click the link for the next page and copy its URL to the clipboard.",
    "Value":   ""
    },
   {"Command": "XClick",
    "Target":  "//*[@id=\"container\"]/div[2]/section/div[2]/a/div",
    "Value":   "#right"
    },
   {"Command": "XType",
    "Target":  "A",
    "Value":   ""
    },
   {"Command": "comment",
    "Target":  "Click the link for the next page. (Tried with 'clickAndWait' instead in 
         order to wait for the page to load, but that yielded error 'No page load 
         event detected after 10 seconds.')",
    "Value":   ""
    },
   {"Command": "click",
    "Target":  "//*[@id=\"container\"]/div[2]/section/div[2]/a/div",
    "Value":   ""
    },
   {"Command": "comment",
    "Target":  "Open the Save-as dialog.",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_CTRL+KEY_S}",
    "Value":   ""
    },
   {"Command": "comment",
    "Target":  "Wait for the dialog to appear.",
    "Value":   ""
    },
   {"Command": "pause",
    "Target":  "2000",
    "Value":   ""
    },
   {"Command": "comment",
    "Target":  "Paste the clipboard (URL of now-current page) into Filename text box.",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_CTRL+KEY_V}",
    "Value":   ""
    },
   {"Command": "comment",
    "Target":  "Move the cursor to the beginning of the URL. (There is no Home key!)",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}${KEY_CTRL+KEY_LEFT}",
    "Value":   ""
    },
   {"Command": "comment",
    "Target":  "Select from the beginning of the URL to the end of its path part.",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}${KEY_SHIFT+KEY_CTRL+KEY_RIGHT}",
    "Value":   ""
    },
   {"Command": "comment",
    "Target":  "Delete the selection, leaving just the filename.",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_DEL}",
    "Value":   ""
    },
   {"Command": "pause",
    "Target":  "500",
    "Value":   ""
    },
   {"Command": "comment",
    "Target":  "Save the page.",
    "Value":   ""
    },
   {"Command": "XType",
    "Target":  "${KEY_ENTER}",
    "Value":   ""
    }
   ]
 }

也许这会有一定的帮助,谁一直想自动化的页面保存其他人。 如果任何人都可以在这个提高,也许你可以说如何评论或另一种答案。 特别是如果你知道为什么另存为对话框不可靠关闭,并知道如何解决这个问题。



文章来源: How to automate saving webpages?