1

コンポーネントを使用してブラウザのようなアクティビティを実行するプログラム (VS 2010 を使用する C#) がありWebBrowserます。

プログラムの目的は、Web ページをクロールすることです。最初の問題は、約の後です。50 ページ JavaScript エラーが発生します (メモリ不足 (画像参照))

スクリプト エラー

このエラーを無視するには、次のコマンドを使用します。

ScriptErrorsSuppressed = true

上記のコマンドはスクリプト エラーを解決しますが、別の問題を引き起こします。

Links.InvokeMember("click");ページをスクロールしたり、Ajax リンクをクリックしたりするためにも使用します。

そのため、プログラムはエラーを受け取り、ScriptErrorsSuppressedそれを無効にしますがinvoke、ページをクリックするのをやめます...そしてクロールが停止します。

この問題を解決する方法を知っている人はいますか?

4

2 に答える 2

1

問題は、ブラウザ コントロールでダウンロードされ実行されるクライアント コードに翻弄されることです。それが正しくない場合、リークやこれらのメモリの問題が発生します。

私が考えられる唯一のことは、いくつかのページの後、ある時点でブラウザー コントロールを破棄して再作成し、これが役立つかどうかを確認することです。

于 2012-08-21T10:16:18.823 に答える
0

Web ページをクロールする場合は、Web ブラウザー コントロールを使用しないでください。httpWebRequest クラスを使用してリクエストを作成し、html 文字列を取得すると、MSHTML を使用して HTML 文字列のリンクと DOM オブジェクトをループすることができるため、mshtml に渡すと、その HTML 文字列が適切なオブジェクトに変換されます。ループ スルー (したがって、文字列操作を使用してリンクを解析して解析する必要はありません。mshtml のおかげで、リンクはすべてオブジェクトに変換されるため、すべてをループするだけです)。

もちろん、この方法では、すべての JavaScript とあなたが持っているものは実行されず、帯域幅と時間を無駄にして、それらすべての画像をロードし、必要のないときにすべての要素を画面に描画する必要はありません。

私を取得しますか?さらにサポートが必要な場合はお知らせください。

于 2012-09-01T21:18:35.603 に答える