2017-02-17 26 views
0

Я пытаюсь получить исходный код HTML таблицы с определенным атрибутом. Код ниже поможет вам разобраться больше.Получить исходный код HTML таблицы с определенным атрибутом

public static async Task GetCldInfos() 
{ 
    string sURL = @"https://www.investing.com/economic-calendar/"; 
    using (HttpClient clientduplicate = new HttpClient()) 
    { 
     clientduplicate.DefaultRequestHeaders.Add("User-Agent", 
      "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); 

     using (HttpResponseMessage responseduplicate = await clientduplicate.GetAsync(sURL)) 
     using (HttpContent contentduplicate = responseduplicate.Content) 
     { 
      try 
      { 
       string resultduplicate = await contentduplicate.ReadAsStringAsync(); 

       //var websiteduplicate = new HtmlDocument(); 
       //websiteduplicate.LoadHtml(resultduplicate); 
       Debug.WriteLine(resultduplicate); 
      } 
      catch (Exception ex1) 
      { 
       throw ex1.InnerException; 
      } 
     } 
    } 
} 

Когда мы посещаем here мы имеем возможность установить временные рамки. Временные рамки, которые мы выбрали, соответственно изменяют таблицу. Когда я делаю HTTP-запрос для получения источника, он автоматически дает мне стандартный GMT GMT, который равен GMT-5: 00.

Как я могу получить источник, например, с GMT 0:00?

+0

Как я уже говорил в предыдущем вопросе, Agility пакет не может работать Javascript, и нет способа получить какие-либо данные, кроме по умолчанию, которые возвращает один HTML-код HTTP. Для этого вам нужен браузер без браузера или «WebView», как мы использовали в последнем ответе. Рассмотрите возможность использования * Awesomium * (http://www.awesomium.com/). Он бесплатный и имеет несколько полезных утилит для безгласного просмотра, как самостоятельный класс 'WebView'. –

ответ

0

С HTML Agility Pack, вы можете использовать следующий метод расширения, чтобы получить определенный элемент с определенным атрибутом:

public static IEnumerable<HtmlNode> GetNodesByAttr(this HtmlDocument htmlDoc, string tag, string attributeName, string attributeValue) 
    { 
     var allTags = htmlDoc.DocumentNode.Descendants(tag); 

     return (from htmlNode in allTags 
       select htmlNode.Attributes 
        into attrs 
        from attr in attrs 
        where attr.Name == attributeName && attr.Value == attributeValue 
        select attr).Select(attr => attr.OwnerNode).ToList(); 

    } 

Например, если вы хотите найти стол с класса" gmt0", вы можете вызвать метод расширения, как это:

var websiteduplicate = new HtmlDocument(); 
websiteduplicate.LoadHtml(resultduplicate); 

var myElement = websiteduplicate.GetNodesByAttr("table", "class", "gmt0").FirstOrDefault(); 
+0

Я не думаю, что это правильный ответ. Таблица с запрошенным временем GMT недоступна. Единственный доступный - стандартный, GMT -5: 00. Очевидно, что заголовок должен быть установлен до того, как будет выполнен запрос. Я все еще пытаюсь понять, что. –

+0

Ах, в этом случае вам нужно использовать что-то вроде сетевых инструментов Fiddler или Chrome, чтобы понять, что происходит, когда вы меняете выбор combobox. Вышеприведенный код предназначен для получения HTML-кода определенного элемента. –