Selenium VBA (excel) для отправки диапазона значений ячеек в поле ввода текста веб-страницы - PullRequest
0 голосов
/ 29 сентября 2018

Я пишу макрос Excel, используя Selenium basic, для автоматизации загрузки данных из веб-инструмента, который я использую.

Используя селен, мне нужно каким-то образом выбрать 200 ячеек в столбце в Excel и отправитьих в текстовое поле на веб-странице.

Следующая строка успешно делает это с одной ячейкой A1:

driver.FindElementById("batch_requests").SendKeys [A1]

Мой вопрос: Как я могу отправить весь диапазон A1: A200

Цикл и выполнение по одному за один раз будет слишком трудоемким, поскольку мне нужно вставить тысячи точек данных за раз, 200 за один раз.

Использование стандартных sendkeys в VBA(не Selenium) не является хорошим решением, потому что компьютер будет использоваться, пока макросы работают в фоновом режиме.

Итак, есть ли способ отправить диапазон значений ячеек на веб-страницу, а нетолько одна ячейка?

Заранее благодарим за любую помощь или совет, который я могу получить!

РЕДАКТИРОВАТЬ - Код, который я в конечном итоге использовал, можно увидеть ниже.Это ответ @Qharrs, соответствующий моим потребностям (спасибо, Qharr, буквально не смог бы сделать это без вас. Я действительно пытался ;-))

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

' Copy column A 200 cells at a time into webpage text input field

Dim clipboard As Object
Dim data As String
Dim myRange As Range
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
' See how many rows of data in column A
numRows = Range("A1", Range("A1").End(xlDown)).Rows.Count

' Step through column A, 200 cells at a time (until numRows is exceeded)
' and create a range to be copied to clipboard and sent to webpage via Selenium
' 'Batch_Requests' is ID of input field page element to send text to.

    For x = 2 To numRows Step 200
        Set myRange = Range("A" & x & ":A" & (x + 200))
        myRange.Copy
        With clipboard
            .GetFromClipboard
            data = .GetText
            driver.FindElementById("batch_requests").SendKeys data
        End With

' *****************************************************************************
' Insert Seleneium code here to manipulate the web page with the data
' *****************************************************************************

' Clear text input field
        driver.FindElementById("batch_requests").Clear

' Go to next 200 in column A (until none left)
    Next x

1 Ответ

0 голосов
/ 29 сентября 2018

Это основано на sendKeys.Не так уж плохо с селеном на мой взгляд.Я использую буфер обмена для генерации текста из диапазона для вставки

Option Explicit
Public Sub PasteInfo()
    Dim d As WebDriver, clipboard As Object, data As String
    Set d = New ChromeDriver
    Const url = "https://codebeautify.org/Xpath-Tester"

    With d
         '.AddArgument "--headless"
        .Start "Chrome"
        .get url
        [A1:A3].Copy

        Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        With clipboard
            .GetFromClipboard
            data = .GetText
        End With

        .FindElementById("xmlString").SendKeys data
        Stop '<=Delete me later
        .Quit
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...