Нажмите на кнопку Изображение в IE - PullRequest
0 голосов
/ 31 октября 2018

Я работаю над проектом '' Automation IE '', но застрял при нажатии на кнопку Изображение ...

Я пытаюсь спулировать один отчет Excel с веб-сайта, и для этого мне нужно нажать кнопку «Создать» (type="submit")`` then one message will appear (Успешный отчет помещен в очередь) then only I can click on download button (type = "image") `

Скриншот

Below is the Screenshot

Ниже находится кнопка сгенерировать исходный код HTML

<td align="right">
<input type="submit" name="ctl00$ContentPlaceHolder1$btnGenerate" value=" Generate "
onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ContentPlaceHolder1$btnGenerate&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" 
id="ctl00_ContentPlaceHolder1_btnGenerate" tabindex="4" title="Click Here" class="dxbButton_Glass">
</td>

Ниже приведен исходный код HTML для сообщения

<td colspan="2">
<span id="ctl00_ContentPlaceHolder1_lblMsg" style="color:Blue;font-weight:bold;">Report Spooled Successfully</span>
</td>

Ниже приведен исходный код HTML для кнопки загрузки (type="image")

<td align="right" visible="false">
click here to Download&nbsp;
<input type="image" name="ctl00$ContentPlaceHolder1$lnkDownload" id="ctl00_ContentPlaceHolder1_lnkDownload" tabindex="7" title="Download" src="../../Images/save.gif" alt="Download" style="border-width:0px;">
</td>

С моим кодом я могу нажать кнопку Generate, но, столкнувшись с трудностями, нажав кнопку Download после появления сообщения, попытался выполнить цикл до тех пор, пока не будет выполнено условие, и попытался, если Element.innertext = message, но не повезло.

Ниже приведен код My VBA

Sub KBOSS_Brokerage_Process_Status()
    Set Browser = CreateObject("internetexplorer.application")
    Browser.Visible = false
    Browser.navigate ("my url")
    Set mymsg = Browser.document.getElementById("ctl00_ContentPlaceHolder1_lblMsg")
    For Each elem In mymsg.getElementsByTagName("span")
        If elem.innerText = " Report Spooled Successfully " Then Exit For
    Next elem
    Browser.document.getElementById("ctl00_ContentPlaceHolder1_lnkDownload").Click
    Browser.Quit
    Set Browser = Nothing
End Sub

Спасибо!

Кросс-пост: https://chandoo.org/forum/threads/vba-code-to-select-an-option-from-html-drop-down-using-value-rather-than-index.37707/#post-228291

1 Ответ

0 голосов
/ 31 октября 2018

Таким образом, это может не решить ваших проблем, но, по крайней мере, оно вводит правильное ожидание загрузки страницы, в том числе после каждого события щелчка, и синхронизированный цикл для текста, который вы хотите после появления. Я также добавляю закомментированный FireEvent в случае, если это необходимо для запуска onclick. Вам не нужно устанавливать Browser на ничего. Он будет утилизирован, когда суб завершится. Когда переменная Object освобождает свою ссылку, выходя из области видимости, среда выполнения вызывает метод целевого объекта Release для уменьшения счетчика ссылок объекта.

Option Explicit

Public Sub KbossBrokerageProcessStatus()
    Dim browser As Object, t As Date, ele As Object, testValue As String
    Const MAX_WAIT_SEC As Long = 5

    Set browser = CreateObject("InternetExplorer.Application")
    With browser
        .Visible = True
        .navigate2 "myUrl"

        While .Busy Or .readyState < 4: DoEvents: Wend

        With .document

            .getElementById("ctl00_ContentPlaceHolder1_btnGenerate").Click '.FireEvent("onclick")

            While browser.Busy Or browser.readyState < 4: DoEvents: Wend

            Do
                DoEvents
                On Error Resume Next
                Set ele = .getElementById("ctl00_ContentPlaceHolder1_lblMsg")
                testValue = ele.innerText
                On Error GoTo 0
                If Timer - t > MAX_WAIT_SEC Then Exit Do
            Loop While testValue  <> "Report Spooled Successfully"

            If ele Is Nothing Or testValue  <> "Report Spooled Successfully"   Then Exit Sub

            .document.getElementById("ctl00_ContentPlaceHolder1_lnkDownload").Click

            While browser.Busy Or browser.readyState < 4: DoEvents: Wend

        End With

        .Quit
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...