在解释后保存包含 javascript 的网站

G. *_*ach 7 browser

我想保存一个包含 javascript 的网站(如果有帮助,该网站是 vyou.com;这是一个指向Andrew WK用户页面的链接),它更新用户在网站上看到的内容。我想做的是在用户视频答案的链接列表完全展开后保存网站。我不打算也保存这些链接指向的视频,我只想保存我的浏览器所处的状态。我使用什么浏览器对我来说并不重要。

有没有人做过类似的事情或知道如何做到这一点?

Kev*_*gan 9

您保存的文件与您保存的实时网站不完全相同的原因(至少)有两个:

  1. 页面上的一些或许多图像链接可能是“相对”链接。同样,页面上“.css”和“.js”文件的链接可能是“相对”链接。
  2. 一些图像和其他文件的链接可以包含在这些“.css”和“.js”文件中。

例如,假设您查看页面:

http://example.com/something/index.php
Run Code Online (Sandbox Code Playgroud)

在该页面上,是一个图像文件的“相对”链接:

"../images/picture.jpg"
Run Code Online (Sandbox Code Playgroud)

该页面上还有一个指向 .css 文件的“相对”链接:

"../css/style.css"
Run Code Online (Sandbox Code Playgroud)

因此,当您为页面保存“.html”文件时,它包含这些“相对”链接。当您在浏览器中打开保存的页面时,它会在您保存 .html 文件的文件夹中查找这些图像和 css 文件。如果这些图像和 css 文件不在您保存 .html 文件的文件夹中,则页面将无法正常显示。

你可以做一些事情来“解决”这个问题。

  1. File-->Save as...-->Webpage, complete将网页保存到计算机时选择(或类似的措辞)。这将在您的计算机上保存图像和 .css/.js 文件的副本,并修改保存的 html 文件中的链接以指向您计算机上的图像/文件。这不是“万无一失”。似乎这个过程会经常“错过”一些文件。在这种情况下,您必须手动定位并下载丢失的文件,并手动编辑您保存的 html 文件中的链接以“指向”保存在您计算机上的文件。
  2. 将 html 文件另存为“Web-archive”文件(“.mht”)
  3. 将“base href...”行添加到<head>已保存的 html 文件副本中的部分。以上面的 URL 为例:

    http://example.com/something/index.php
    
    Run Code Online (Sandbox Code Playgroud)

    从网页 URL 中删除“index.php”为您提供:

    http://example.com/something/
    
    Run Code Online (Sandbox Code Playgroud)

    将此添加到网页已保存副本的 <head> 部分,如下所示:

    <头>
    <base href="http://example.com/something/">
    <...>
    <...>
    </头>
     ...
    



编辑(2013-04-04):

使用 Internet Explorer 保存页面的最佳方式(可能并不完美)同时保存页面上 JavaScript 的“结果”,是使用Microsoft Developer Tools,然后查看并保存页面的 DOM 源。

我说“也许不完美”......

假设您有一个网页,该网页使用 JavaScript 来“生成”将图像添加到网页的 HTML 代码。

如果您在线查看网页,您将看到图像。如果您查看页面源代码 ( View-->Source) 或将页面源代码保存到文件 ( File->Save as...),您将看到 JavaScript,但不会看到 HTML<img...>代码。

现在,如果您使用开发者工具查看并保存页面的 DOM 源,然后在文本编辑器中打开保存的文件,您将看到原始 JavaScript 包含在保存的文件中,然后在 JavaScript 下方,您将查看<img...>由 JavaScript 生成的代码。

然后,如果您在浏览器中打开保存的页面,您将看到该图像两次。这是因为当您打开保存的页面时,JavaScript 将再次执行并生成显示图像的代码,其下方是保存到文件中的图像的 HTML 代码。

您可以通过编辑保存的 DOM 源来“修复”这个问题,然后删除(或注释掉)JavaScript。然后,当您在浏览器中打开保存的页面时,您只会看到该图像一次。


编辑(2013-04-05):

从浏览器保存包含相关链接的网页似乎有些混乱,所以我决定提供一个工作示例。

这是我创建的一个网页来演示这一点:
瀑布灯塔图片

这是该页面的 HTML 代码:

<html>
<头>
<title>瀑布和灯塔</title>
</头>
<身体>
<img src="../images/imagesCAIPHDL5.jpg" /><br />
<br /><hr align="left" width="284" /><br />
<script type="text/javascript">document.write("\n"+'<img src="../images/imagesCAG7M85E.jpg" /><br />');</script>
</正文>
</html>


如果您使用浏览器查看页面(我使用的是 IE9),您将正确看到预期的网页,有 2 张图片。

查看页面时,您可以通过单击:View-->Source或单击 来保存页面源File-->Save as...-->Webpage, HTML only。然后保存文件。无论哪种方式,您都将获得相同的 HTML 代码:

<html>
<头>
<title>瀑布和灯塔</title>
</头>
<身体>
<img src="../images/imagesCAIPHDL5.jpg" /><br />
<br /><hr align="left" width="284" /><br />
<script type="text/javascript">document.write("\n"+'<img src="../images/imagesCAG7M85E.jpg" /><br />');</script>
</正文>
</html>


但是,如果您在浏览器中查看保存的文件,您将看到一个空白页面,没有图片。这是因为保存文件中的图片链接,和 JavaScript 编写的图片链接都是“相对”链接……浏览器无法分辨图片所在的域或路径。你可以在这里看到它的样子:
View-Source
HTML-only

如果您编辑此保存的文件并添加以下行:

<base href="http://viewthis.info/superuser577187/page/">


该文件将如下所示:

<html>
<头>
<title>瀑布和灯塔</title>
<base href="http://viewthis.info/superuser577187/page/">
</头>
<身体>
<img src="../images/imagesCAIPHDL5.jpg" /><br />
<br /><hr align="left" width="284" /><br />
<script type="text/javascript">document.write("\n"+'<img src="../images/imagesCAG7M85E.jpg" /><br />');</script>
</正文>
</html>


现在,如果您在浏览器中查看编辑后的文件,您将获得一个页面,其中两张图片都显示正确。这是因为“base href”行告诉浏览器在哪里查找(域和路径)“丢失”的图片。你可以在这里看到它的样子:
Source-with-base-href

在线查看页面时,您还可以通过点击: 保存页面来源
File-->Save as...-->Webpage, complete

如果您查看此已保存文件的源代码,您将看到以下 HTML 代码:

<!-- 保存自 url=(0042)http://viewthis.info/superuser577187/page/ -->
<html>
<头>
<title>瀑布和灯塔</title>
<meta content="text/html; charset=windows-1252" http-equiv=Content-Type>
<meta name=GENERATOR content="MSHTML 9.00.8112.16470">
</头>
<身体>
<img src="Waterfall-and-Lighthouse_files/imagesCAIPHDL5.jpg" /><br />
<br /><hr align=left width=284 /><br />
<script type=text/javascript>document.write("\n"+'<img src="../images/imagesCAG7M85E.jpg" /><br />');</script>
</正文>
</html>


如果您在浏览器中查看此保存的文件,您将获得一个页面,其中第一张(顶部)图片正确显示,但第二张图片未显示(丢失)。这是因为使用 保存时Webpage, complete,浏览器会在您的硬盘驱动器上保存第一张图像的副本,并修改保存文件中的链接以指向该图像的本地副本。保存的文件中不存在第二张图片的图像链接。创建第二个图像链接的 JavaScript 代码保存在文件中,但实际链接不是页面源的一部分,因此不会保存第二个图像链接,也不会保存第二个图像文件。

同样,如果您编辑此保存的文件并添加以下行:

<base href="http://viewthis.info/superuser577187/page/">


然后在浏览器中查看编辑后的文件,你会得到一个页面,两张图片都显示正确。

在线查看页面时保存页面的另一种方法是单击:
File-->Save as...-->Web Archive, single file-->Save

如果您在浏览器中查看这个保存的文件,您将获得一个页面,其中两张图片都显示正确。这是因为“存档”格式将第一张图像保存在存档文件(编码)中,并保存网页(和域名/路径)和第二张图像文件所在的网址。

在所有这些示例情况下,JavaScript 的“结果”(处理 JavaScript 后页面的当前状态),即第二个图像链接,不包含在保存的文件中,只保存了 JavaScript。

请记住,在这些示例中,JavaScript 的“结果”非常“简单”,几乎是 JavaScript 的“微不足道”使用。在“真实”网页中,JavaScript 可能非常复杂,并且可以生成许多页面(仅受可用内存量的限制)。

现在,如何使用来自 JavaScript 的“结果”保存页面。我们将使用 Microsoft Developer Tools 执行此操作(本答案前面显示了下载链接)。

安装开发者工具后,在线查看页面时,按F12键或单击:
Tools-->F12 Developer Tools

然后在打开的窗口中,单击:
View-->Source-->DOM (page)

一个新窗口打开。单击File-->Save,然后保存文件。

如果您查看此已保存文件的源代码,您将看到以下 HTML 代码:

<html>
<头>
<title>瀑布和灯塔</title>
</头>
<身体>
<img src="../images/imagesCAIPHDL5.jpg" /><br />
<br /><hr width="284" align="left" /><br />
<script type="text/javascript">
 document.write("\n"+'<img src="../images/imagesCAG7M85E.jpg" /><br />');
</脚本>
<img src="../images/imagesCAG7M85E.jpg" /><br />
</正文>
</html>


请注意,在此保存文件的源代码中,您将看到 JavaScript 已保存,并且 JavaScript 的“结果”也已保存:

...
<script type="text/javascript">
 document.write("\n"+'<img src="../images/imagesCAG7M85E.jpg" /><br />');
</脚本>
<img src="../images/imagesCAG7M85E.jpg" /><br />
...


我想这就是你想要的。但是,有两个问题。

首先,和以前一样,如果您在浏览器中查看这个保存的文件,您将看到一个空白页面,没有图片。这是因为保存文件中的图像链接是“相对”链接……浏览器无法告诉在哪里可以找到图片的域或路径。你可以在这里看到它的样子:
DevTools-DOM

同样,如果您编辑此保存的文件并添加以下行:

<base href="http://viewthis.info/superuser577187/page/">


然后在浏览器中查看编辑后的文件,您将获得显示两张图片的页面。你可以在这里看到它的样子:
DevTools-DOM-with-base-href

在这里你会注意到第二个问题。第一个图像(瀑布)正确显示(一次),但第二个图像(灯塔)显示了两次。这是因为在加载保存的页面时,JavaScript 再次执行,为第二张图片生成图片链接,并且第二张图片的图片链接也保存在文件中。

要解决这个问题,您需要再次编辑保存的文件,并删除 JavaScript(删除<script...> and </script>标签和它们之间的所有内容)。现在,编辑后的 文件的来源如下所示:

<html>
<头>
<title>瀑布和灯塔</title>
<base href="http://viewthis.info/superuser577187/page/">
</头>
<身体>
<img src="../images/imagesCAIPHDL5.jpg" /><br />
<br /><hr width="284" align="left" /><br />
<img src="../images/imagesCAG7M85E.jpg" /><br />
</正文>
</html>


现在,保存的文件包含您想要的 JavaScript 的“结果”,如果您在浏览器中查看编辑后的文件,您将获得一个页面,其中只有两张图片中的一张,并且显示正确。你可以在这里看到它的样子:
DevTools-DOM-Final

现在,这一切看起来可能很复杂,但实际上并不......

下载并安装开发人员工具后,只需 4 个相当简单的步骤...在查看(在浏览器中)您要保存的页面时:

  1. F12键或单击:Tools-->F12 Developer Tools
  2. 在打开的窗口中,单击: View-->Source-->DOM (page)
  3. 在新窗口中,单击File-->Save,然后保存文件。
  4. 编辑您保存的文件并添加“base href”行,然后删除 <script...> ... </script>