我正在尝试用 C# 检索网页的内容。问题在于该网页使用 Ajax 和 JavaScript 动态创建和填充 HTML 元素。
如果您使用httpWebRequest
获取网站的HTML 代码,则只有JavaScript 调用可见,而不是内容。那么如何在控制台c#程序中获取正在网页上显示的JavaScript的返回结果呢?我尝试过使用网络浏览器类,但无法让它工作。
如何在新线程中使用 Web 浏览器类在数组列表
中显示动态创建的表的结果?此外,如果您不知道名称,如何访问相关的 HTML 标记?可以使用ID标签吗?这是假设 Web 浏览器类是执行此操作的最佳方法。或者有更好的办法吗?
相关的HTML代码部分是:
<div class="ajax_table" id="53c2583b1f204464d7fa9387e2ac1868"><script>blackmamba_pager('Textmining', 'type1=9606id1=ENSP00000317985type2=-26title=Text+mining',
10, 1, '53c2583b1f204464d7fa9387e2ac1868');</script></div>
请给我提供一个如何完成此操作的示例?
最佳答案
这里。然后,也取自堆栈溢出:):
WebBrowser mywebBrowser;
private void Form1_Load(object sender, EventArgs e)
{
mywebBrowser = new WebBrowser();
mywebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(mywebBrowser_DocumentCompleted);
Uri address = new Uri("http://www.cnn.com/");
mywebBrowser.Navigate(address);
}
private void mywebBrowser_DocumentCompleted(Object sender,WebBrowserDocumentCompletedEventArgs e)
{
//Until this moment the page is not completely loaded
HtmlDocument doc = mywebBrowser.Document;
HtmlElementCollection tagCollection;
tagCollection = doc.GetElement("53c2583b1f204464d7fa9387e2ac1868");
}
没有像 jQuery 那样直接通过类名获取元素的方法。如果表 div 的 id 不稳定,您可以使用 GetElementsByTagName,迭代结果。然后,您可以使用 GetAttribute("classname") 来匹配您的“ajax_table”类。
关于javascript - 从c#中的网页检索ajax/JavaScript返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30007821/