Anglesharp получить текст узла после DoClick () - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть 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();

HTML-код div должен измениться на:

<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 '
  • Переписать nodeToClick после 2-секундной задержки без обновлениястраница
  • Перезагрузите 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 элемента, на котором я щелкнул?

1 Ответ

0 голосов
/ 28 апреля 2019

Я запутался, почему что-либо должно произойти, когда вы нажимаете div.То, что вам не хватает для публикации, это ваша конфигурация AngleSharp.

Я думаю, вы предполагаете, что AngleSharp поставляется с поддержкой JS - нет.AngleSharp сам по себе является лишь ядром движка браузера - он имеет все точки подключения и самые основные функции, например, анализатор HTML5.Существует еще одна библиотека для поддержки JS, но она очень элементарна / экспериментальна и потенциально не работает в вашем случае.

Также я предполагаю, что, поскольку вы загружаете HTML в своем собственном коде, JS не будет работатьв любом случае (вам нужно использовать AngleSharp как браузер - браузер, вы также не предоставляете HTML, но URL и браузер делают все остальное - с AngleSharp его тоже самое, и то, что здесь используется, называется BrowsingContext).

Короче говоря.Вы не можете просто щелкнуть что-то статичное и ожидать, что что-то динамичное произойдет.Также вам следует внимательно прочитать документацию AngleSharp - думаю, это может помочь.

HTH!

...