【问题标题】:Pasting text into Excel using Selenium使用 Selenium 将文本粘贴到 Excel
【发布时间】:2013-11-14 10:38:39
【问题描述】:

rSource 设置为单元格 A1 的值,其中包含一个数字。

我的代码的下一部分打开了一个网站并将 rSource 输入到字段“num”中,该字段只是一个输入框。然后单击该按钮,这会导致网站计算输入数字的平方根,然后再将其显示在“答案”框中。

我的代码的问题似乎是这一行:

variableName = driver.findElementByName("answer").getAttribute("value")

我想要的是获取“答案”的属性,该属性将是我之前输入的数字的平方根,然后将其粘贴到单元格 A2 中。

我注意到一件事 getAttribute 似乎与“复制”不同,因为当我尝试手动粘贴到单元格中时,我永远不会得到“答案”。我希望做的是以某种方式“复制”该值,然后使用诸如“ Worksheets("Sheet1").Range("A2").PasteSpecial'之类的东西将“答案”粘贴到单元格A2中...尽管之后玩了一吨,我似乎无法让它工作。任何帮助将不胜感激。

上面的代码是使用 Selenium 创建的,然后我使用 VBA 对其进行了修改。

【问题讨论】:

  • 您是否尝试过突出显示文本并为此使用selenium SendKeys? Selenium 可以突出显示。另一方面,如果你真的需要它来自剪贴板,Clipboard 对象是一个不错的选择。
  • 我不记得我之前做了什么,但它类似于:driver.findElementByName("answer").SendKeys (Keys.Control + "C") 不是为我工作
  • 请看下面我的回答。它不完全是 Selenium 风格,但它可能会有所帮助。

标签: vba excel selenium selenium-webdriver


【解决方案1】:

正如我在 cmets 中所说,Selenium 可以为此使用 SendKeys。但是,如果您真的需要复制粘贴操作,我建议您改用Clipboard

请注意,这需要在您的参考资料中检查Microsoft Forms 2.0 Object Library。如果这没有出现,请将用户窗体添加到您的文件中,默认情况下它将显示为选中状态。

下面的子程序会将一串文本放入剪贴板。运行后执行Ctrl-V 将模拟粘贴操作。

Sub Boom()
Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
With DataObj
    .SetText "Answer"
    .PutInClipboard
End With
End Sub

只需将“答案”替换为您想要的任何值。更好的是,修改上面的内容以便能够接收如下文本字符串:

Sub Boom(Str As String)
Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
With DataObj
    .SetText Str
    .PutInClipboard
End With
End Sub

现在你可以对它执行Boom("Answer"),它会将“答案”放到剪贴板中。然后,您可以使用 Range("A1").PasteSpecial xlPasteAll 或其他方式粘贴它。

希望这可以帮助你。不是真正的Selenium 路径,但至少它是一个非常干净的选择。 :)

编辑:要使用 Selenium 的 SendKeys,它类似于:

Sub CopyTest()

Dim Sel As New SeleniumWrapper.WebDriver
Dim keys As New SeleniumWrapper.keys

Sel.SendKeys keys.Control & "c"

End Sub

希望对您有所帮助。 :)

【讨论】:

  • 感谢您的回复,您能给我一个使用 SendKeys 模拟按 CTRL + C 的示例吗?每次我使用它时都会出错,但可能是我的语法错误。哦,现在就试试你的解决方案。
  • 检查我上面的编辑。请注意,我使用的是&,而您使用的是+& 是正确的。
  • 工作就像一个魅力,非常感谢!我不知道为什么,但 SendKeys 似乎只是讨厌我。最后我使用了你的剪贴板方法,效果很好。
【解决方案2】:

有一个简单的解决方法。不要使用复制粘贴。将.getattribute (value) 替换为.text

variableName = driver.findElementByName("answer").Text

仅供参考,对于多个元素,我使用 .GetData,如下所示:

arrayName = driver.findElementsByClassName("answer").GetData

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多