0

Html Agility Pack を使用して、特定のクラスと ID を持つ div が存在するかどうかを確認しています。

 string target = "http://192.168.3.230/index.htm";
 WebClient client = new WebClient();
 string html = client.DownloadString(target);
 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
 doc.LoadHtml(html);

 if (doc.DocumentNode.SelectSingleNode("//div[@id='bit0' and @class='rledoff']") != null){
      //actions in here
 }

 else if (doc.DocumentNode.SelectSingleNode("//div[@id='bit0' and @class='rledon']") != null)
 {
      //actions in here
 }

現在、else if は true である必要がありますが、if ステートメントでアクションを実行しています。私がやったとき、私はこの作品を正しく見ました

doc.Load("c:\\somelocaldest\\page.htm");

サイトのローカルに保存されたファイルではなく、実際のサイトから実行しようとすると、ID が正しいことがわかり、クラスが無視されます。ローカル ファイルの html を取得する場合と外部サイト/デバイスから取得する場合で、動作が異なる原因は何ですか?

4

1 に答える 1

1

まず、これを行うことをお勧めします。私にとっては、WebClient よりも高速に動作しました。

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(target);

これがローカルの hmtl ファイルでは機能するが、html がサーバー上にある場合は機能しないと言う場合は、次の手順を実行します。

File.WriteAllText(path,doc.DocumentNode.OuterHtml);

htmlweb (または webclient) でダウンロードすると、ページのソース コードが異なる場合があるため、この新しい html ファイルを使用して xpath を再作成します。

于 2013-06-06T12:55:58.660 に答える