2

Web ブラウザー インターフェイスを使用していくつかのサーバー機能を実行するスクリプトを作成しています。Internet Explorer 8 を使用して Windows 7 でスクリプトをコーディングしたところ、正常に動作しました。Windows 2008 と Internet Explorer 9 を実行している運用サーバーに移動するとすぐに、サーバーが壊れます。最後に障害点をたどりましたが、修正方法に少し困惑しています。問題を引き起こすコードは次のとおりです。

$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("http://www.google.com")
$ie.visible = $True
$doc = $ie.document
$Object1 = $doc.getElementByID("pocs")

これにより IE ウィンドウがポップアップし、ID で要素を検索できるはずです。問題は、エラーが発生することです

「「getElementById」と引数カウント「1」のオーバーロードが見つかりません。」

このエラーはほとんど見つかりません。実際の問題は、実際には変数 $doc です。IE 9 で「$doc | get-member」を実行すると、次のようになります。

TypeName: System.__ComObject#{c59c6b12-f6c1-11cf-8835-00a0c911e8b2}

しかし、IE 8 では次のようになります。

  TypeName: mshtml.HTMLDocumentClass

したがって、基本的に、IE 9 / Windows 2008 は、$ie.document を呼び出したときに Web ドキュメントのコンテンツを読み込めません。IE9 を互換モードに設定しようとしましたが、うまくいきません。

$ie.document | get-member は実際には「getElementById Method Variant getElementById ()」のメソッドを示しているため、そこにありますが、解析するドキュメントはありません。

どんなアイデアでも大歓迎です。

4

3 に答える 3

2

質問に関するコメントで詳しく説明されているように、この問題には 3 つの解決策があるようです。

  1. PowerShell 3.0 へのアップグレード: バージョン 2.0 は、Web スクレイピングおよび IE をオブジェクトとして使用する場合、最大 IE8 とのみ互換性があります。ただし、バージョン 3.0 は IE9 で動作します。ここで入手できます。
  2. IE で保護モードをオフにする: 設定の [セキュリティ] タブでインターネット ゾーンの保護モードをオフにすると、うまくいくようです。これには、慎重に検討する必要があるセキュリティへの影響があります。
  3. 管理者モードでスクリプトを実行する: 管理者特権の PowerShell プロンプトでスクリプトを実行するだけです。

最後の 2 つのソリューションは、別のSO answerからのものです。

于 2013-11-11T20:44:43.280 に答える