Anglesharp 在 DoClick() 之后获取节点文本
Anglesharp get node text after DoClick()
我有一个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
returns 我的值与之前相同 nodeToClick.DoClick()
.
我尝试做的事情:
- 在记录`nodeToClick.TextContent'之前插入延迟
Thread.Sleep(2000)
- 在不更新页面的情况下延迟 2 秒后重写 nodeToClick
使用这段代码重新加载 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;
}
但是 none 这对我有用。
如何获取我单击的元素的新 TextContent?
我很困惑为什么当您单击 div
时会发生 任何事情。 post 您缺少的是 AngleSharp 配置。
我想你猜 AngleSharp 带有 JS 支持 - 它没有。 AngleSharp 本身只是一个浏览器引擎核心 - 它带有所有连接点和最基本的功能,例如 HTML5 解析器。还有另一个用于提供 JS 支持的库 - 但它非常初级/实验性,可能不适用于您的情况。
此外,我假设由于您是在自己的代码中下载 HTML,因此 JS 无论如何都无法工作(您需要像浏览器一样使用 AngleSharp - 您也不提供的浏览器 HTML,但是 URL,浏览器会完成剩下的工作 - AngleSharp 是一样的,这里使用的东西叫做 BrowsingContext
)。
长话短说。您不能只单击静态的东西并期望发生动态的事情。另外,您应该仔细阅读 documentation of AngleSharp - 我想它可能有所帮助。
HTH!
我有一个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
returns 我的值与之前相同 nodeToClick.DoClick()
.
我尝试做的事情:
- 在记录`nodeToClick.TextContent'之前插入延迟
Thread.Sleep(2000)
- 在不更新页面的情况下延迟 2 秒后重写 nodeToClick
使用这段代码重新加载 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; }
但是 none 这对我有用。
如何获取我单击的元素的新 TextContent?
我很困惑为什么当您单击 div
时会发生 任何事情。 post 您缺少的是 AngleSharp 配置。
我想你猜 AngleSharp 带有 JS 支持 - 它没有。 AngleSharp 本身只是一个浏览器引擎核心 - 它带有所有连接点和最基本的功能,例如 HTML5 解析器。还有另一个用于提供 JS 支持的库 - 但它非常初级/实验性,可能不适用于您的情况。
此外,我假设由于您是在自己的代码中下载 HTML,因此 JS 无论如何都无法工作(您需要像浏览器一样使用 AngleSharp - 您也不提供的浏览器 HTML,但是 URL,浏览器会完成剩下的工作 - AngleSharp 是一样的,这里使用的东西叫做 BrowsingContext
)。
长话短说。您不能只单击静态的东西并期望发生动态的事情。另外,您应该仔细阅读 documentation of AngleSharp - 我想它可能有所帮助。
HTH!