使用VBA和Selenium来驱动网站
我必须登录SnapSurveys并每月下载20多个文件。现在已经是一个繁琐的过程,现在我必须每周执行一次,而手工完成将变得很繁琐,所以我想实现它的自动化并安装了Selenium来做到这一点。我已经使用SeleniumIDE(在FireFox中)跟踪了整个过程,所以我知道我想做的事情以及如何做的基础知识,但是,我遇到了一个难以理解的砖墙,试图理解该网页。实现它的结构。
使用Chrome和FireFox中的开发工具,我已将“用户名”字段标识为:
<p> <label for="UserName">Username</label>
<input data-val="true" data-val-required="The Username field is required." id="UserName" name="UserName" type="text" value="">
<span class="field-validation-valid" data-valmsg-for="UserName" data-valmsg-replace="true"></span>
</p>
我正在使用以下代码来尝试查找“用户名”文本框,以便在其中键入数据。我Text
依次尝试了每种的值和每种Driver.FindElementBy...
可能性,它们都给了我这个错误:
Run-time Error '7':NoSuchElementError
Element not found for <By type> = <text>
这是代码:
Private Sub Login() Const SITE_BASE_NAME As String = "https://www.snapsurveys.com/login"
Dim Driver As IEDriver
Set Driver = New IEDriver
Dim IsSiteLoaded As Boolean
IsSiteLoaded = Driver.Get(SITE_BASE_NAME)
If IsSiteLoaded Then
Dim Text As String
Text = "columns six"
Text = "UserName"
Text = "main"
Text = "//*[@id=""UserName""]"
Dim El As WebElement
Set El = Driver.FindElementByClass(Text)
Set El = Driver.FindElementByCss(Text)
Set El = Driver.FindElementById(Text)
Set El = Driver.FindElementByLinkText(Text)
Set El = Driver.FindElementByName(Text)
Set El = Driver.FindElementByPartialLinkText(Text)
Set El = Driver.FindElementByTag(Text)
Set El = Driver.FindElementByXPath(Text)
End If
Driver.Quit
End Sub
我发现 没有 给我一个错误的一个组合是:
Text = "main"Set El = Driver.FindElementById(Text)
但这仅使我成为屏幕顶部的面包屑,而且我不确定如何从那里获得有用的信息。
显然,我对Web设计的了解不足,无法提供我应该寻找的任何线索,但是我认为我可以通过尝试和错误尝试来解决此问题,而这比这要少得多。
此外,是否填写用户名和密码字段,单击“登录”,然后单击下一页上的相应链接等,是实现此目的的最佳方法吗?我 认为
登录后,应该可以为我需要的每个文件获取一个链接集合,然后直接下载每个链接,但是我不确定是否可以做到这一点。
一些注意事项:
- 是的,我意识到该代码正在使用IE作为浏览器。我为FF和Chrome安装的驱动程序似乎已经过时(浏览器会打开,但不会加载网页),而且我还没有更新的驱动程序。目前,只要能正常使用,我都不会在乎使用哪种浏览器。
- 是的,我意识到我要在末尾关闭浏览器
Sub
。同样,我只是在测试,试图在黑暗中找到自己的路。
回答:
登录功能位于中iframe
。您必须将硒的焦点切换到该iframe,然后再试一次,它应该可以工作。
您可以尝试以下方法:
Driver.switchtoframe (0)Driver.FindElementById("UserName")
有关Web设计的一些知识在处理硒自动化方面可以有很长的路要走,但是只要具备一些基本知识,您就可以轻松完成工作。
您应该寻找什么元素取决于您要实现的目标。如果要在文本字段中输入内容,则应查找<input
type="text">元素,对于表格,则需要查找<table>
元素。
我通常更喜欢通过xpath使用find元素,但是如果该元素具有唯一性id
或class
在网页上,则可以按类名使用find元素,也可以按id使用find元素。
您似乎在正确的道路上可以自动执行任务。
以上是 使用VBA和Selenium来驱动网站 的全部内容, 来源链接: utcz.com/qa/435168.html