2016-12-10 3 views
0

Хорошо. Поэтому я нашел этот код в Интернете, все работает над ним, но он показывает мне класс div, который я ищу, но удаляет весь текст. Любая идея почему? Херес пример того, что его вывода ...Не удается получить innertext html C#

<div class="marquee"><img src="logo.png" /></div> 
<div id="joke"> 
    <div id="setup" class="exit-left"></div> 

    <div id="punchline"> 
     <div class="question"></div> 
     <div id="zing" class="exit-right"></div> 
    </div> 
</div> 
<div id="buttons"> 
    <input id="tell-me" class="exit-bottom no-select" type="button" value="Tell Me!" /> 
    <!--<input id="another" class="exit-bottom" type="button" value="Another!" />--> 
    <table class="another exit-bottom no-select"> 
     <tr> 
      <td class="another" colspan="3">Another</td> 
      <td class="share"><div class="share-img"></div>Share</td> 
     </tr> 
    </table> 
</div> 

И InnerText не отображается на всех ... А вот мой код VS.

var doc = new HtmlAgilityPack.HtmlDocument(); HtmlAgilityPack.HtmlNode.ElementsFlags ["br"] = HtmlAgilityPack.HtmlElementFlag.Empty; doc.OptionWriteEmptyNodes = true;

    try 
       { 
        var webRequest = HttpWebRequest.Create("http://dadjokegenerator.com/"); 
        Stream stream = webRequest.GetResponse().GetResponseStream(); 
        doc.Load(stream); 
        stream.Close(); 
       } 
       catch (System.UriFormatException uex) 
       { 

        throw; 
       } 
       catch (System.Net.WebException wex) 
       { 

        throw; 
       } 

       //get the div by id and then get the inner text 
       doc.GetElementbyId("content").InnerHtml; 
       await e.Channel.SendMessage("test " + divString); ` 
+0

Кроме того, я хочу сделать «тест» понятным, чтобы никто не спрашивал об этом. Все, что я использую сейчас, тестируют, потому что программа im, выводящая в нее, приведет к сбою программы, если она попытается отправить сообщение без текста. – LogandadLoga

+0

Можете ли вы изменить пример html, чтобы показать div с id = 'content'? Включите некоторых родителей, надеюсь, из тега –

+0

То есть с id = 'content'. – LogandadLoga

ответ

1

Хотя ваш код правильно загружает содержимое страницы http://dadjokegenerator.com/, InnerHtml пуст, потому что эта страница на самом деле не содержит шутку, которую вы ищете (вы можете увидеть, что, если вы вызываете исходный код страницы в вашем браузере - например, в Firefox нажмите CTRL + U). Шутка добавляется на эту страницу позже javascript. Если вы посмотрите на исходный код этого Javascript на http://dadjokegenerator.com/js/main.js, вы можете увидеть, что отдельные шутки загружаются с URL-адреса http://dadjokegenerator.com/api/api.php?a=j&lt=r&vj=0

Вот минимальный образец для загрузки шутки с этого URL-адреса. Я все ошибки опущен-проверки для простоты и я использовал бесплатную библиотеку Json.NET для JSON десериализации:

public class Joke 
{ 
    public int Id; 
    public string Setup; 
    public string Punchline; 

    public override string ToString() 
    { 
     return Setup + " " + Punchline; 
    } 
} 

public static Joke GetJoke() 
{ 
    var request = HttpWebRequest.Create("http://dadjokegenerator.com/api/api.php?a=j&lt=r&vj=0"); 
    using (var response = request.GetResponse()) 
    { 
     using (var stream = response.GetResponseStream()) 
     { 
      using (var reader = new StreamReader(stream)) 
      { 
       var jokeString = reader.ReadToEnd(); 

       Joke[] jokes = JsonConvert.DeserializeObject<Joke[]>(jokeString); 
       return jokes.FirstOrDefault(); 
      } 
     } 
    } 
} 

Использование является, например,

GetJoke().ToString();