0

我有一个 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)在记录“nodeToClick.TextContent”之前插入延迟
  • 延迟 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;
        }
    

这些都不适合我

如何获取我单击的元素的新 TextContent?

4

1 回答 1

0

我很困惑为什么当您单击 a 时会发生任何div事情。您缺少发布的是您的 AngleSharp 配置。

我想你猜 AngleSharp 带有 JS 支持——它没有。AngleSharp 本身只是一个浏览器引擎核心——它带有所有的连接点和最基本的功能,例如,HTML5 解析器。还有另一个用于提供 JS 支持的库 - 但它非常初级/实验性,并且可能不适用于您的情况。

另外我会假设,由于您是在自己的代码中下载 HTML,因此 JS 无论如何都无法工作(您需要像浏览器一样使用 AngleSharp - 浏览器您也不提供 HTML,但 URL 和浏览器会完成剩下的工作 -与 AngleSharp 相同,这里使用的东西称为BrowsingContext)。

长话短说。你不能只点击静态的东西并期望动态的东西发生。此外,您应该仔细阅读AngleSharp 的文档——我想它会有所帮助。

于 2019-04-28T08:57:33.310 回答