【发布时间】:2020-01-06 05:16:46
【问题描述】:
我使用以下代码获取页面源,但它不返回属性数据:
string url = "http://www.tsetmc.com/Loader.aspx?ParTree=15131F";
WebClient client = new WebClient();
client.Headers["Accept-Encoding"] = "gzip";
string pageSource = client.DownloadString(url);
网站的Content-Encoding是gzip
【问题讨论】:
-
该页面是由脚本动态生成的。您无法通过下载流获得其构建的结果,您需要一个 WebBrowser 来解释和执行脚本。因此,使用无头浏览器导航到页面并获取呈现的页面。
-
@Jimi 我是用 CefSharp 做的,但我需要在类库中做(需要定期编写 windows 服务)而不是图形形式(如 windows 窗体),因此我试图用 WebClient 来做
-
您不需要图形界面。这就是为什么要编写headless browser。您需要一个 WebBrowser 类,而不是 UI 控件。尝试使用标准的 WebBrowser 类并处理 DocumentCompleted 事件。当心 IFrame。阅读此处的注释How to get an HtmlElement value inside Frames/IFrames?
-
这也可能派上用场:WebBrowser Control in a new thread(需要小心处理)。另一个实现也是:Close Application after WebBrowser print(一个更具体的用例,它还显示了本机 ActiveX 的使用)
-
如果您还没有将这些修改应用于 WB 兼容模式:How can I get the WebBrowser control to show modern contents?
标签: c# .net winforms webclient