【问题标题】:Missing div elements when downloading html using WebClient使用 WebClient 下载 html 时缺少 div 元素
【发布时间】:2021-08-14 11:19:37
【问题描述】:

我目前正在尝试在this page 上获取一个 div 元素,特别是这个 html 代码块:

<div id="glossary-space">
 <div class="noresults">No results.</div>
</div>

但是当我尝试使用 Weblcient 下载页面时,结果如下:

&lt;div id="glossary-space"&gt;&lt;/div&gt;

我正在使用这行代码来下载页面。

using (WebClient client = new WebClient ()) // WebClient class inherits IDisposable
{

    string htmlCode = client.DownloadString("http://yoursite.com/page.html");
}

【问题讨论】:

  • 您似乎正在处理单页应用程序或使用 javascript 异步加载数据的页面。我想如果您在浏览器中关闭 Javascript,您会看到与 WebClient 相同的结果。
  • 我建议只解析用于构建词汇表的JSON,而不是按照接受的答案中的建议进行浏览器自动化。
  • 啊,我什至没有想过这样做!谢谢!

标签: c# html webclient


【解决方案1】:

你没看到的原因

<div id="glossary-space">
 <div class="noresults">No results.</div>
</div>

当你使用 .DownloadString() 方法是因为 WebClient 不解析 javascript。如果词汇表为空,则在glossary.js(第296行附近)中插入没有结果的div(如上所示)。

if(termlist.length == 0) {
    var empty = document.createElement('div');
    empty.setAttribute('class','noresults');
    empty.innerHTML = 'No results.';
    //document.getElementById('glossary-space').appendChild(document.createTextNode("No results"));
    document.getElementById('glossary-space').appendChild(empty);
}

另一方面,即使您要输入带有内容的 URL(例如 https://glossary.infil.net/?t=KI),它仍然会返回

因为这些数据也是由 javascript 加载的。在这种情况下,最好使用可以使用 javascript 的网络驱动程序,例如 Selenium

【讨论】:

    猜你喜欢
    • 2019-12-26
    • 2021-07-17
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多