Режим отладки и режим работы ведут себя по-разному на селен VBA (Excel) - PullRequest
1 голос
/ 20 марта 2020

Я искал некоторое время, но не могу найти решение. Также найдите аналогичную ссылку на этой странице, и она заблокирована из-за дублирования, но на самом деле она не является дубликатом чего-либо. это не Java или # c или другие упомянутые языки. это коды VBA и селена. по ссылке ниже в режиме отладки (F8) все работает гладко, однако в режиме выполнения (F5) он не заполняет разделы даты и даты или частично.

Есть ли у вас какие-либо идеи? Кроме того, веб-сайт является корпоративным веб-сайтом, поэтому, к сожалению, я не могу им поделиться.

Option Explicit
Sub Download_Report4()
Dim obj As New Selenium.WebDriver
Dim ele As WebElement
obj.Start "Chrome"
obj.Get "https://test.com"
Dim Username, Password As Range
Set Username = ActiveWorkbook.Sheets("LoginData").Range("B1")
Set Password = ActiveWorkbook.Sheets("LoginData").Range("B2")
           obj.FindElementById("UserName").SendKeys Username.Text
            obj.FindElementById("Password").SendKeys Password.Text
            obj.FindElementById(LoginButton").Click
            Application.Wait Now + TimeValue("00:00:02")

     Dim Rows, x

For x = 2 To Sheet1.UsedRange.Rows.count Step 1

    If IsEmpty(Sheet1.Range("A" & x)) Then
        Exit For
    Else

obj.FindElementByName("date$From").Clear
obj.FindElementByName("date$To").Clear


    obj.FindElementByName("date$From").SendKeys ("01,03,2017")
    obj.FindElementByName("date$To").Click
       obj.FindElementByName("date$To").SendKeys (Sheet1.Range("B" & x))
       obj.FindElementById("btnSearch").Click

       obj.FindElementById("btndownload").Click
End If
Next


End Sub

, кстати, формат даты правильный. если введено 01.03.2017 chrome добавить даты нечетными. раздел месяца к дате год является правильным и ничего не добавляет к разделу месяца.

Я приведу немного больше деталей. в приведенном ниже коде для inte rnet explorer работает очень хорошо, если только после нажатия кнопки загрузки, ie 11 запрос «хотите открыть или сохранить» останавливает мой макрос и завершается цикл. это причина, по которой я перемещаю макрос селена.

Public Sub Download_Report()
    Dim ie As New InternetExplorer
    Dim myElem As Variant
        ie.Visible = True
        ie.navigate "https://test.com"

            ie.document.getElementById("UserName").Focus
            ie.document.getElementById("LUserName").Value = Sheets("LoginData").Range("B1").Text
            ie.document.getElementById("Password").Focus
            ie.document.getElementById("Password").Value = Sheets("LoginData").Range("B2").Text
            ie.document.getElementById("LoginButton").Click
            End If

     Dim Rows, x
 For x = 2 To Sheet1.UsedRange.Rows.count Step 1

    If IsEmpty(Sheet1.Range("A" & x)) Then
        Exit For
    Else
                    While .Busy Or .readyState < 4: DoEvents: Wend
        ie.document.getElementsByName("date$From")(0).Value = Sheet1.Range("A" & x).Text
                    While .Busy Or .readyState < 4: DoEvents: Wend
        ie.document.getElementsByName("date$To")(0).Value = Sheet1.Range("B" & x).Text
                    While .Busy Or .readyState < 4: DoEvents: Wend
        ie.document.getElementById("btnSearch").Click
                    While .Busy Or .readyState < 4: DoEvents: Wend
        ie.document.getElementById("btndownload").Click
End If
Next
End With
End Sub

дата может быть использована в качестве средства выбора после щелчка, но также может быть заполнена как текст, код раздела даты на веб-сайте, как показано ниже. также дата в разделе так же, как. Код сайта (сайт находится за брандмауэром)

<input name="date$From" type="text" value="18/02/2020" size="6" id="date_tbFrom" class="searchSelect">
<input type="hidden" name="date_From_Client" id="date_From_Client">

1 Ответ

0 голосов
/ 22 марта 2020

да, возникла проблема, которая (я не знаю почему, но), когда команда .click была применена к курсу раздела даты, была выбрана половина раздела, или конец, так что дата была введена макросом, неверна, или раздел не может быть заполнен, что означает пустой. однако в моде отладки все работало гладко. чем я нахожу другое решение. У меня есть разделы на одну вкладку до даты разделов. затем добавил

obj.FindElementByName("date$From").Clear
obj.FindElementByName("date$To").Clear
obj.findelementsbyid("sectionbeforedatefrom").click
obj.sendkeys(keys.Tab)
obj.FindElementByName("date$From").SendKeys ("01,03,2017")
obj.findelementsbyid("sectionbeforedateto").click
obj.sendkeys(keys.Tab)
obj.FindElementByName("date$To").SendKeys (Sheet1.Range("B" & x))
obj.FindElementById("btnSearch").Click

эти шаги работали для меня. но @TimWilliams был прав, все связано со временем. спасибо всем.

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