【问题标题】:Anglesharp get node text after DoClick()Anglesharp 在 DoClick() 之后获取节点文本
【发布时间】:2019-07-22 06:47:17
【问题描述】:

我有一个 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() 之前的值相同。

我想做什么:

  • 在记录“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;
        }
    

但是这些都不适合我

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

【问题讨论】:

    标签: c# parsing web-scraping anglesharp


    【解决方案1】:

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

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

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

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

    HTH!

    【讨论】:

      猜你喜欢
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多