1

我有这个代码我正在下载一个网站的 HTML 文件并将其保存到我的硬盘上。在构造函数中:

var uri = new Uri("http://www.walla.co.il");

然后 :

DownloadHtml();

private void DownloadHtml()
        {
            using (var client = new WebClient())
            {
                client.DownloadFile(webSite, OriginalHtmlFilePath);
            }
        }

然后在对下载的 html 文件做一些事情后,我用 WebBrowser 加载它:

string html = File.ReadAllText(ScrambledHtmlFilePath);
webBrowser1.DocumentText = html;

如果该网站是例如http://www.cnn.com 我用网络浏览器加载它没有问题。例如,如果该站点是http://www.walla.co.il 当我使用 Web 浏览器加载它时,一些图像和其他内容不会显示出来。

在这两个站点中,当我使用网络浏览器加载它们时,我遇到了许多脚本错误,我必须多次单击“是”才能继续加载页面。

脚本错误

此页面上的脚本出现错误

行字符 ....

您想继续在此页面上运行脚本吗?

然后我选择是,直到页面加载完毕。如果 html 文件是 cnn.com 内容后做了很多 YES 页面加载良好。

但是,如果 html 文件是希伯来语,例如 walla.co.il 在最后单击“是”多次后,我会看到:

在此处输入图像描述

而原来的网站根本不是这样的。

4

2 回答 2

3

当您下载该页面时,您将下载该页面的源代码。但是,当您的浏览器下载页面时,会随 HTML 一起下载很多内容。例如,有 JavaScript 文件、CSS 文件(用于样式)等等。即使您也下载了它们,您可能需要修改您的 HTML 以使用相对或绝对路径(取决于您的需要)将这些文件链接到 HTML。

换句话说,网页未按预期显示,因为附件未下载并链接到 HTML。

更新

当您设置文档的来源时,找不到与 HTML 相关的附加文档(css、js 等),因此不会在网页中使用。例如:

<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/stackoverflow/all.css?v=a25094f085c0">

无论从哪里加载它都可以工作,但是:

<link rel="stylesheet" type="text/css" href="/css/all.css">

惯于。

更新 2

这是您收到脚本错误的确切原因。浏览器找不到一些(或大部分,甚至全部)附加脚本(标签.js中的文件<script>),当它尝试运行 JavaScript 代码时,它会失败。

于 2013-06-27T19:50:57.017 回答
0

问题是相对路径与绝对路径。

当浏览器显示 HTML 页面时,它还需要检索图像、css 表格和 javascript 等内容。由于 HTML 文件中的说明,它知道在哪里可以找到这些东西。有时,HTML 指令包含相对路径,而不是绝对路径。当存在相对路径时,没有关于页面原始位置的额外提示,Web 浏览器必须以页面的当前位置或上下文为基础,为页面上的每个相关项构建完整路径. 在这种情况下,您只有一个字符串变量,因此没有上下文。

您可以改进这一点,将base标签添加到下载的 html 文件的头部(如果尚不存在),以指示页面的原始位置并帮助浏览器知道如何处理相关链接。

于 2013-06-27T20:00:22.490 回答