none
Webに表示されている状態のhtmlソースを取得したい。 RRS feed

  • 質問

  •   VS2017 C# にて、下記にて、htmlソースを取得しています。

         HttpClient client = new HttpClient();
         string source = await client.GetStringAsync(htmladdress)

         取得した、source がどうも実際に表示されているサイトの内容と違っています。
         調べていったら、
    Chromeデベロッパーツールの[Elements]パネル、と [Sources]パネル でHtmlソースの内容が異なる
         サイトでした。

         HTTPClient関連で、上記[Elements]で 表示する内容を取得する method 等ありましたら、
         ご教授ください。

       追記 
         1.上記サイトは株式のサイトのようなリアルタイムで順次変更されているようなサイトではありません。
             一度、表示されたらそのまま同じ状態です。
         2. Edge、F12開発者ツール(デバックツール)要素で取得したHTMLソース も chrome の [Sources]パネル
              と同じでした。

       追記 
         1.上記サイトは株式のサイトのようなリアルタイムで順次変更されているようなサイトではありません。
             一度、表示されたらそのまま同じ状態です。
         2. Edge、F12開発者ツール(デバックツール)要素で取得したHTMLソース も chrome の [Sources]パネル
              と同じでした。
         3.angleSharp が 良さそうとのことで、インストールして確かめたのですが、該当のmethodは、見つけられませんでした。
             var document = BrowsingContext.New(Configuration.Default.WithDefaultLoader()).OpenAsync(htmlUrl).Result;
             これも、取得したHtmlソースは、client.GetStringAsync(htmladdress) で取得した内容と同じでした。

            

          
    2019年6月10日 12:58

回答

  • 可能性としては 2 つ考えられます。

    1. User-Agent などの HTTP リクエストヘッダの差によって、サーバーから送られてくる結果が異なる
    2. JavaScript などの実行結果によって HTML の差が生まれる

    angleSharp のデフォルトは HTML 解析だけのはずなので、後者には対応できないと思います。
    後者の可能性が高いなら JavaScript エンジンと組み合わせてください。(試していませんが、こういった記事 もありました)

    前者の可能性を疑うのであれば、Fiddler と組み合わせつつ、HTTP ヘッダの差を埋めるように試していってください。(HTTP ヘッダの話の参考

    • 回答としてマーク エンバー 2019年6月10日 22:42
    2019年6月10日 13:19
    モデレータ

すべての返信

  • 可能性としては 2 つ考えられます。

    1. User-Agent などの HTTP リクエストヘッダの差によって、サーバーから送られてくる結果が異なる
    2. JavaScript などの実行結果によって HTML の差が生まれる

    angleSharp のデフォルトは HTML 解析だけのはずなので、後者には対応できないと思います。
    後者の可能性が高いなら JavaScript エンジンと組み合わせてください。(試していませんが、こういった記事 もありました)

    前者の可能性を疑うのであれば、Fiddler と組み合わせつつ、HTTP ヘッダの差を埋めるように試していってください。(HTTP ヘッダの話の参考

    • 回答としてマーク エンバー 2019年6月10日 22:42
    2019年6月10日 13:19
    モデレータ
  • 先のあなたのスレッドに回答したにもかかわらず、質問を消してどっかに行ってしまいましたよね。

    ログイン認証後のHTMLソースを取得したい
    https://social.msdn.microsoft.com/Forums/ja-JP/6a7aa3d6-d332-4d0c-bf08-135e181b0b3e/1252512464124521253135469353882446012398html12477125401247312434?forum=csharpgeneralja

    失礼な話だと思いませんか?

    それはともかくとしても、JavaScript のことは HttpClient でも同じですよ。

    2019年6月10日 13:23
  • Azulean さま

      解答ありがとうございます。

      やはり、簡単な method 等では、ないのですね。

      目的のサイトは、どうも2、の JavaScript のようです。

      ご紹介ししてくださった、サイトは、事前調査では発見できていませんでした。勉強してみたいと思います。

     ただ当方、JavaScript はほとんどだめなので、理解できるかは??? ですが。

    2019年6月10日 22:57