User Tools

Site Tools

study:anglesharp:20250311-003:index

Anglesharp 在 DoClick() 之後取得節點文本 (2025-03-11)

Local Backup

  • 我有一個 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?

改進這個問題 最佳答案

  • 我很困惑為什麼當你點擊 a 時會發生任何事情div。您缺少發布的是您的 AngleSharp 配置。
  • 我想你會猜到 AngleSharp 帶有 JS 支援 - 但事實並非如此。 AngleSharp本身只是一個瀏覽器引擎核心-它配備了所有的連接點和最基本的功能,例如HTML5解析器。還有另一個用於提供 JS 支援的庫 - 但它非常基礎/實驗性,並且在您的情況下可能不起作用。
  • 另外,我認為既然您正在用自己的程式碼下載 HTML,那麼 JS 無論如何都無法工作(您需要像瀏覽器一樣使用 A​​ngleSharp - 在瀏覽器中您也不必提供 HTML,而只需提供 URL,瀏覽器就會完成剩下的工作 - AngleSharp 也是一樣,這裡要使用的東西叫做BrowsingContext)。
  • 長話短說。您不能只點擊某個靜態的東西並期望某些動態的事情發生。您還應該仔細閱讀AngleSharp 的文檔 - 我想它可能會有所幫助。
  • 呼呼!

Permalink study/anglesharp/20250311-003/index.txt · Last modified: 2025/03/11 08:44 by jethro

oeffentlich