2

一部の VBA コードに非常に奇妙な問題があります。コードは InternetExplorer 自動化であり、非常に単純です。ページをロードし、資格情報を入力し、別のページのボタンをクリックするだけです (ログインに成功した後)。

しかし...私のコードは機能していません(ただし、AWS上の私のマシンの1つだけです)。私のローカル マシンでは、このコードは正常に動作します。

奇妙なことに、最初に読み込まれたページ (ログイン/パスワードを入力する必要がある場所) の Document プロパティにしかアクセスできないようです。つまり、MyBrowser.Documentプロパティから、INPUT開始ページをロードするとすべてのフィールドが表示されます。しかし、ログインに成功すると (IE ウィンドウが表示されます) 、プロパティから同じ INPUTフィールドが表示されMyBrowser.Documentます! また、(私が言ったように)別のマッシングでこのコードに問題はありません。

IE 保護モードが無効になっています (これは IE 11 です)。これはある種のセキュリティ上の問題だと思いますが、自分で見つけることができません...

これが私のコードです:

'MyBrowser is IE instanse 
'Here I'm loading start page and input login/password
'Next the browser show me another page where I need to click a button
'But Debug messages show me input fields for the first Form!

Application.Wait (Now + TimeValue("0:00:05"))
    Do
    DoEvents
    Loop Until MyBrowser.ReadyState = READYSTATE_COMPLETE

Set HTMLDoc = MyBrowser.Document
For Each myHTML_Element In HTMLDoc.getElementsByTagName("INPUT")
If myHTML_Element.Type = "submit" And myHTML_Element.Name = "BUTTONNEWJOBS" Then myHTML_Element.Click: Exit For
Debug.Print myHTML_Element.Name
Next

更新 理由はわかりませんが、私のブラウザー オブジェクトは常にBusy、古いページの HTML を取得する理由です。私はそれを試みまし.Stopたが、運がありませんでした。

4

2 に答える 2

1

IE11 の自動化に関する回答はありません。選択できるパスのヒントにすぎません。

別のスタック オーバーフローの質問テンプレート エンジンでレンダリングされた後にページのソースを取得しますか? いくつかのブラウザ自動化オプションを提供します。

上記のツールの 1 つは、IE11 の動作変更により現在 IE11 のサポートを中断しています。 http://docs.seleniumhq.org/about/platforms.jsp#browsersを参照してください。ブロッキングの問題には、役立つと思われる構成のヒントがいくつかあります。

私の意見では、Internet Explorer は、レンダリングの互換性、プログラム可能性、さらには異なるバージョン間での自動化の問題の観点から、常に最も信頼性の低いツールでした。Internet Explorer は何年にもわたって改善されてきましたが、(プログラマーの観点からは) 避けるほうがよいでしょう。幸いなことに、現在利用できるツールはこれだけではありません。

そのため、作業を完了する必要がある場合は、他のブラウザーまたはブラウザーに似たツールを使用できます。

IE を使用する必要がある場合は、Internet Explorer Dev Center → Community → Developer forumsで回答を得る必要があります。

編集(コメントの後)

あなたの質問の症状によると、いくつかのダイアログボックス(おそらくセキュリティプロンプト)がユーザーに表示されているため、ブラウザオブジェクトがビジーであるように見えます。役立つかもしれないGoogleからのいくつかのリンク:

約 1000 行のコードを書き直して別の自動化インターフェイス (またはブラウザー) を使用し、Microsoft の Internet Explorer Dev Center に助けを求めることは、IMO ではまだ有効なオプションです。

于 2014-06-10T20:20:11.123 に答える
0

あなたの次の声明に基づいて

MyBrowser.Document プロパティから同じ INPUT フィールドが表示されます。

ページが完全に読み込まれていないようです。おそらく、AJAX 経由でデータをロードし、送信ボタンをクリックすると、サーバーからの応答を待っている間にまったく同じページが表示されます (同じ INPUT フィールドが表示された理由が説明されます)。

これをテストする簡単な方法は、ブラウザの ReadyState の値を無視して、より長い時間 (たとえば 30 秒) 待機することです。ただし、成功したページで最初のページにない要素が見つかるまでループすることをお勧めします。タイムアウトは 30 秒程度です。

Selenium を使用して自動化を行ったところ、同様の問題が発生し、Implicit Waitsを使用する必要がありましたが、VBA がそのような機能であるかどうかはわかりません (VBA を知らないため)。

于 2014-06-07T12:06:16.430 に答える