2

このサイトの html コードを取得する必要があります (C# を使用):

http://urbs-web.curitiba.pr.gov.br/centro/defmapalinhas.asp?l=n (IE8 でのみ動作)

WebClient クラス、HttpWebResquest、またはその他のライブラリを使用しても、動的に生成された html コードにアクセスできません。したがって、私の唯一の解決策 (推測) は、WebBrowser Control (WPF) を使用することです。

ここに画像の説明を入力

mshtml.HTMLDocument と SHDocVw.IWebBrowser2 を使用して試行錯誤していましたが、混乱していて、必要なものが見つかりません

「iframe」がたくさんあるようで、中にはもっと「iframe」があります。私は知りません、私は試しました:

  IHTMLElementCollection elcol = htmlDoc.getElementsByTagName("iframe");
  var test = htmlDoc.getElementsByTagName("HTML");
  var test2 = doc.all;

誰も私を助ける方法を知っていますか?

観察・雑学: これは私の街のすべてのバスがどこを通過するかを示すサイトです。このサイトはひどいもので、IE8 でしか動作しませんが、重大な問題があります。この情報をもとに、後はグーグルマップやビングマップを使って、より良いサービス作りに努めていきたいと思います。

情報を取得しようとしていたサイトは利用できなくなりました。動的な html ソース コードを取得するというアイデアは放棄され、WPF の WebBrowser コントロールを使用して解決策を見つけることができません。

今日、この問題を解決する方法は他にもあると思います。

4

1 に答える 1

1

WebBrowser コントロールで「Frames」オブジェクトを使用する必要があります。正しく思い出すと、このオブジェクト コレクションはすべてのフレームと iframe を返します。また、ページで見つけた新しく発見されたフレームごとにフレーム コレクションを確認する必要があります。 ? したがって、実行する必要がある再帰的な検出ループのようなものです。見つかった各フレームを配列またはコレクションに追加し、「未検索」フレームごとに、そのフレーム「.Frames」コレクションを確認する必要があります (それらはすべて.Count など、典型的なコレクションにすぎません)、新しく発見されたすべてのフレームに対してこれを行います。もちろん、「.Frames」コレクションが検索されていない新しく発見されたフレームがなくなるまで。

したがって、関数を上記のように実行すると、VB6 プロジェクトでこれを行ったように、無限にネストされたフレームを検出できるようになります (必要に応じてソースを提供します)。ただし、私の例ではネストは保持されていませんが、ネスト構造は重要ではないため問題ありません。コレクションに追加されたフレームの順序によってどれが何であったかを理解する必要があります。追加されるフレームの階層。

これを行うと、これで html ソースを取得するのは非常に簡単です。おそらく、使用している WB コントロールのバージョンに応じて .DocumentText を行う方法を知っていると思います。

また、HTTP クライアントを使用してソース コードを直接取得することはできないとおっしゃいましたか。フレーム オブジェクトを取得したら、各フレーム オブジェクトから URL を取得し、URL2String タイプの呼び出しを実行して URL を取得し、それを httpclient のようなクラスまたはフレームワークから文字列に変換できるため、私は同意しません。特定のリファラーからのリクエストのみを受け入れる場合(つまり、リファラーはファイルの一部のドメイン名からのものである必要があるなど)、またはUSER_AGENTの1つではない場合、彼らに代わって防止できる唯一の方法技術的には、データを拒否して返さない可能性がありますが、可能性は低いです。

ただし、使用している httpclient で referrer と user_agent の両方を変更できるため、この種のものに基づいて制限を課している場合は、非常に簡単に偽装して、期待するデータを提供できます。繰り返しますが、これは可能性が低いものですが、特にデータが独自のものである場合は、このように設定されている可能性があります.

PS: サイトへの最初の訪問は、IE がクラッシュしてそのタブを再度開いてしまいました :)、ひどいサイトだと思います。

于 2012-10-02T00:58:44.787 に答える