28

WebBrowser コントロールを使用しており、コントロールに表示される前に HTML コードを操作したいと考えています。

たとえば、次のコンテンツを含む Web サイト A を開きます。

<html>
  <body>
    <p id="Text">Hello</p>
  </body>
</html>

に変更したい

<html>
  <body>
    <p id="Text">Bye</p>
  </body>
</html>

DocumentCompleted イベントを使用してそれを実行し、それを操作できることはわかっています。しかし、Web サイトが Document ready イベントで実行される JavaScript を実行する場合、それを変更しても意味がありません。それは既に実行されているからです。

4

3 に答える 3

16

Navigatedイベント内で DOM 操作を行うことができます。

webBrowser1.Navigated += (sender, e) =>
{
    ((WebBrowser)sender).Document.GetElementById("Text").InnerHtml = "Bye";
};

これは、ドキュメント内の DOM 対応ハンドラーの前に実行されます。たとえば、最初に次の HTML があったとします。

<html>
<head>
    <title>Test</title>
</head>
<body onload="document.getElementById('Text').innerHTML = document.getElementById('Text').innerHTML + ' modified';">
    <p id="Text">Hello</p>
</body>
</html>

このコードを WebBrowser に表示すると、Bye modified.

于 2013-01-07T07:01:12.280 に答える
0

これは動作しません。私は同じ問題に直面しています。ajax 呼び出しを変更したい場合はどうしますか? ナビゲート メソッドは起動しません。また、navigate メソッドが iFrame で起動することはありません。

唯一の解決策はプロキシを使用することだと思います。[NuGet パッケージの追加] をクリックするだけです。fiddlercore を検索します。http://www.telerik.com/fiddler/fiddlercoreへの参照を追加したら。ここで、FiddlerCore を使用して応答を変更する方法について Google 検索を実行してください。たくさんの例があると確信しています。

注:デフォルトで fiddler コアを起動すると、コンピューターのプロキシ設定が変更されます。あなたはそれを望んでいません!システム全体ではなく、Webブラウザコントロールのみに接続する必要があります。そのため、システム プロキシとして起動せずにランダム ポートでリッスンするように fdderl コアを初期化します。次に、そのプロキシに接続するように Web ブラウザー コントロールを設定します。

HTTPS サイトにアクセスしようとすると、よりトリッキーになります :/

于 2015-08-21T14:23:12.413 に答える
0

妥当な間隔 (~20ms) でコールバックでこれを行いsetInterval、DOM の準備ができたときなどの適切な時間に間隔をクリアできます。

唯一の注意点は、コールバックは複数回呼び出されるため、べき等である必要があることです。既に変更した DOM ノードにデータ属性またはクラス名を追加するだけで、再び変更されないようにするのは難しいことではないと思います。

于 2015-08-28T01:02:45.560 に答える