2017-12-08 8 views
-2

私はテキストボックスを持つWindowsフォームを持っています。コードはchromes開発ツールを使って得たxpathを使ってウェブサイトから情報を引き出し、HtmlAgilityPack - テキストボックスに何も表示されない

問題は、プログラムを実行してもテキストボックスに何も表示されない場合です。情報を取得するために使用されるコードが間違っているのか、その情報を表示するコードが間違っているのかどうかはわかりません。このコードはHtmlAgilityPackを使用しています。

private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 
     string Url = "https://apps.ko.com/aami/iguest/default.asp"; 
     HtmlWeb web = new HtmlWeb(); 
     HtmlAgilityPack.HtmlDocument doc = web.Load(Url); 

     string username = doc.DocumentNode.SelectNodes("/html/body/center/div/table/tr[1]/td[2]/strong")[0].InnerText; 
     string password = doc.DocumentNode.SelectNodes("/html/body/center/div/table/tr[2]/td[2]/strong")[0].InnerText; 
     string summary = doc.DocumentNode.SelectNodes("/html/body/center/div/table/tr[4]")[0].InnerText; 


     richTextBox1.Text = "User Name: " + username + " | Password: " + password + " | Summary: " + summary; 

    } 

あり、イントラネットページに記載されているユーザー名とパスワードがあると私はWebページからそれを引くと、テキストボックスに表示し、そうしようとしている:ここで

は、問題のコードですこのアプリケーションがドメインマシン上で実行されている間は、ページにアクセスして必要な情報を表示できるはずです。私は何かにログインしようとしていない、ちょうどウェブページからいくつかのテキストを引っ張る。

ドメインからアクセスできないため、あなたがページを見ることができません。

セキュリティ上の理由からコード内のウェブアドレスが変更されたHTMLページです。

<body> 
 
<div style="background-image:url(intranet.com/images/headergraphic_repeat_tile.jpg); background-repeat:repeat-x; margin-top:0px; margin-left:0px; width:100%; height:118px; padding:0px;"> 
 
<img src="https://intranet.com/iguest/images/headergraphic_extended.jpg" align="right"> 
 
</div> 
 
<center> 
 
<div style="width:390px; padding:20px; "> 
 
    <h2 align="center">Guest Wireless Access</h2> 
 
    <p align="left">Guests may access the wireless service by using the log-in <br>credentials below. <br> 
 
     <br> 
 
    </p> 
 
    <table width="360" align="left" cellpadding="4" cellspacing="0"> 
 
    <tbody><tr> 
 
     <td width="63">User ID:</td> 
 
     <td><strong>KOGUEST</strong></td> 
 
    </tr> 
 
    <tr> 
 
     <td>Password:</td> 
 
     <td><strong><span id="iguestpw">[email protected]</span></strong> <font size="-2">&nbsp;&nbsp;(Password is case-sensitive.)</font></td> 
 
    </tr> 
 
    <tr> 
 
    \t <td colspan="2" align="center"><font size="-2"> The password is updated once a week on<br> Saturday at midnight EST.<br></font></td> 
 
    </tr> 
 
    <tr> 
 
    \t <td colspan="2"><br><br><p align="left"><a href="https://partner.intranet.com/sites/kooffice/training/documentation/guest wireless access_instructions for connecting.doc" target="_blank">Print instructions</a> for your guest.<!-- or <a href="https://partner.intranet.com/sites/kooffice/training/i want to/courtesy wireless access.aspx" target="_blank">visit DWP</a> to learn more.--></p></td> 
 
    </tr> 
 
    
 
    </tbody></table> 
 
    </div> 
 
    </center> 
 
</body>

+0

そのHtmlでは、あなたのxpathに 'tbody'がありません。 'table'タグの中には' tbody'タグがあり、 'tbody'の中にはテーブルの行があります。例えば、最初のxpathは '/ html/body/center/div/table/tbody/tr [1]/td [2]/strong'でなければなりません。 – derloopkat

+0

私はcomewithがtbodyを誤って追加するところを読んでいますが、 xpathはクロムを使用しているので、間違っているかもしれません。私はxpathを書く方法を知りません。 –

+0

Firefoxでは、要素を右クリックし、 "inspect"を押します。次に、Htmlタグを右クリックし、xpathをコピーします。また、この$ x( "my xpath here")を使用してコンソールでxpathsを短縮してテストすることもできます。フルパスではなく、// td [text()= 'User ID:']/following-sibling :: td/strong'のようなものを書くのがアイデアです。最初は二重スラッシュ「//」に注意してください。これにより、どこにいてもそれが見つかります。 Chromeの検査ツールも良いです。 – derloopkat

答えて

1

あなたは、あなたからのxpathをコピーしているブラウザからもらった - 非常に信頼性がありません。そして、ウェブサイトが地域によって異なるHTMLを持っているかどうかはわかりません。しかし私は私の中に「強い」タグや「センター」タグを持っていません。

ブラウザから取得したxpathに依存しない適切なxpathを実行します。小さな変更が発生した場合、変更が発生しやすくなり、プログラムが中断されます(xpathがmy終わり)。簡単なことをするのはとても簡単です。あなたが今持っているものは、タグの属性と内容に依存しているxpathが望むものを明確に示していないからです。

また、あなたが何をしようとしているかをすでに伝えることができるので、フォローアップの質問を展開することもできます.HtmlAgilityPackを使用してユーザー名とパスワードを入力してログインするだけでは、フィドラーとwebpacketsとあなたのログイン方法を複製します。または、Phantomjsのようなヘッドレスブラウザで簡単なルートを使用してSeleniumを使用することもできます。

最後に、あなたがあなたのxpathsをページソースを見るようにするとき。要素を検査しないでください。ページソースは、HtmlDocumentに読み込まれるHTMLを表します。要素を調べると、サイト上のいくつかのステップが発生した後でソースコードが取得されます(たとえば、サイトがコンテンツを更新するためにJS og ajaxに依存している場合など)。

関連する問題