我有一个HTML代码:
<div class="contact-button link-phone {'path':'phone', 'id':'gtziy', 'id_raw': '243468578'} atClickTracking contact-a"
data-rel="phone">
<i data-icon="phone"></i>
<strong class="xx-large">HIDDEN TEXT HERE</strong>
<span class="spoiler">SHOW</span>
</div>
我正在使用以下代码获取div:
IHtmlElement nodeToClick = (IHtmlElement)document.All.First(m =>
m.HasAttribute("class") &&
m.ClassList.Contains("contact-button") &&
m.HasAttribute("data-rel") &&
m.GetAttribute("data-rel") == "phone");
然后我使用DoClick()单击节点:
nodeToClick.DoClick();
div的HTML代码应更改为此:
<div class="contact-button link-phone {'path':'phone', 'id':'gtziy', 'id_raw': '243468578'} atClickTracking contact-a activated"
data-rel="phone">
<i data-icon="phone"></i>
<strong class="xx-large">TEXT HERE</strong>
<span class="spoiler" style="display: none;">SHOW</span>
</div>
但是nodeToClick.TextContent
返回的值与nodeToClick.DoClick()
之前相同。
我尝试做的事情:
Thread.Sleep(2000)
使用以下代码重新加载页面的HTML:
public static string GetHTML(string url)
{
HttpWebRequest proxy_request = (HttpWebRequest)WebRequest.Create(url);
proxy_request.Method = "GET";
proxy_request.ContentType = "application/x-www-form-urlencoded";
proxy_request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.89 Safari/532.5";
proxy_request.KeepAlive = true;
HttpWebResponse resp = proxy_request.GetResponse() as HttpWebResponse;
string html = "";
using (StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.UTF8))
{
html = sr.ReadToEnd();
sr.Close();
}
resp.Close();
html = html.Trim();
return html;
}
但是这些都不适合我。
如何获取单击的元素的新TextContent?
答案 0 :(得分:1)
我很困惑为什么单击div
时会发生任何事情。您缺少要发布的是AngleSharp配置。
我认为您猜想AngleSharp附带了JS支持-事实并非如此。 AngleSharp本身只是浏览器引擎的核心-它具有所有连接点和最基本的功能,例如HTML5解析器。还有另一个提供JS支持的库-但它的基础/实验性很强,可能不适用于您的情况。
我还要假设,因为您正在以自己的代码下载HTML,所以JS仍然无法正常工作(您需要像浏览器一样使用AngleSharp-浏览器也不提供HTML,但是URL却提供了HTML其余的-与AngleSharp相同,这里使用的东西称为BrowsingContext
)。
长话短说。您不能只单击静态的东西而期望动态的东西发生。另外,您应该仔细阅读documentation of AngleSharp-我想它可能会有所帮助。
HTH!