Selenium VBA(excel)将一系列单元格值发送到网页文本输入字段

时间:2018-09-29 11:23:38

标签: excel vba excel-vba selenium web-scraping

我正在使用Selenium basic编写一个excel宏,以自动从我使用的基于Web的工具下载数据。

使用硒,我需要以某种方式在excel的一列中选择200个单元格,然后将其发送到网页的文本框中。

下面的一行使用单个单元格A1成功完成了此操作:

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

我的问题是:如何发送整个范围A1:A200

一次浏览一个循环太耗时,因为我需要一次粘贴数千个数据点,一次要粘贴200个。

在VBA(不是Selenium)中使用标准sendkey并不是一个好的解决方案,因为在宏在后台运行时将使用计算机。

那么,有没有一种方法可以将一定范围的单元格值发送到网页,而不仅仅是单个单元格?

提前感谢我可能收到的任何帮助或建议!

编辑-我最终使用的代码如下。这是满足我需要的@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 :(得分:0)

这是基于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