1

ユーザーが Web サイトから抽出したファイルをダウンロードするプロセスを自動化しようとしています。私の問題は、「エクスポート」ボタンをクリックすると、クリックする必要がある最後の「ダウンロード」ボタンとともに、抽出のさまざまな日付パラメーターが JavaScript ポップアップ ウィンドウに表示されることです。この JavaScript ポップアップ ウィンドウで問題が発生します。エクスポート ボタンをクリックしてポップアップ ウィンドウが開くと、スクリプト中に PowerShell がフリーズしたように見え、それ以上のコマンドを実行できなくなります。

正しい IE プロセス ウィンドウを取得するために、WASP モジュールを SELECT-WINDOW と共に使用してみましたが、'Select-Window -Title "NAME OF POPUP WINDOW - Windows Internet Explorer" | -最初の 1 | を選択します。最初の「エクスポート」ボタンがクリックされた直後 (ポップアップ ウィンドウが開いた直後) に Powershell が「スクリプトの実行中」にスタックするため、Set-WindowActive コマンドは実行されません。さらにコマンドを実行するためにポップアップ ボックスを開いた後に Powershell を「更新」する方法、またはこの Javascrip ポップアップで行き詰まる連続的な「実行中のスクリプト」ループから抜け出す方法に関するアイデアはありますか窓?

# Set access URL and Credentials
$WebU='username'
$WebP='password'
$URLlogin='http://websiteurl.com'
$IEwait="1000"
# Execute IE and navigate to URL
$ie = New-Object -com "InternetExplorer.application";
$ie.visible = $True;
$ie.navigate($URLlogin);

Try{
# Login steps
while ($ie.Busy ) { Start-Sleep -Milliseconds $IEwait; }
if ($ie.Document.getElementByID("txtLogin"))
    { $ie.Document.getElementByID("txtLogin").value = $WebU }
while ($ie.Busy ) { Start-Sleep -Milliseconds $IEwait; }
if ($ie.Document.getElementByID("txtPassword"))
    { $ie.Document.getElementByID("txtPassword").value = $WebP }
while ($ie.Busy ) { Start-Sleep -Milliseconds $IEwait; }
if ($ie.Document.getElementByID("btnLogin"))
    { $ie.Document.getElementByID("btnLogin").Click() }
# Navigate through website to find the 'Export' button
while ($ie.Busy ) { Start-Sleep -Milliseconds $IEwait; }
if ($ie.Document.getElementByID("managementMenu_btnLearningResults"))
    { $ie.Document.getElementByID("managementMenu_btnLearningResults").Click() } 
while ($ie.Busy ) { Start-Sleep -Milliseconds $IEwait; }
# This is the part that freezes the script. Once the 'btnExport' button is clicked, a JS popup keeps Powershell from executing any additional commands
if ($ie.Document.getElementByID("btnExport"))
    { $ie.Document.getElementByID("btnExport").Click() } 
# Once the popoup box opens, sending the 'ENTER' key should automatically download the export file
Select-Window -Title "NAME OF POPUP WINDOW - Windows Internet Explorer" | Select -First 1 | Set-WindowActive
Select-Window -Title "NAME OF POPUP WINDOW - Windows Internet Explorer" | Select-childwindow | Send-Keys "{ENTER}"
}
# These won't execute because the JS popup window confuses Powershell and keeps it in a continuous 'Running Script' process
Catch {
    "Error" }
Finally {
    "Now able to execute further commands" }
4

3 に答える 3

0
    While ( $ie.busy -eq $true){ 
        [System.Threading.Thread]::Sleep(2000); 
        $wshell = New-Object -ComObject wscript.shell;
        if($wshell.AppActivate('Message from webpage'))
        {
            [System.Threading.Thread]::Sleep(1000); 
            [System.Windows.Forms.SendKeys]::SendWait('{Enter}')
        }
    }
于 2016-04-22T03:29:21.537 に答える
0

IE のオブジェクト モデルは、実際にはちょっと危険です。基礎となるリソースがまだロードされていないため、準備ができていないのに準備ができているとよく言われます。ページを操作するたびにこのコードを書き直すのが面倒だったので、それに対処するために AutoBrowse というモジュールを作成しました。

http://autobrowse.start-automating.com/

代わりにこれを使用すると、問題を回避できます。

お役に立てれば

于 2013-06-25T18:58:08.447 に答える