我必须登录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...可能性,它们都给了我这个错误:
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设计的了解不足,无法提供我应该寻找的任何线索,但是我认为我可以通过尝试和错误尝试来解决此问题,而这比这要少得多。
我需要在页面源代码中寻找哪些元素,FindElementBy需要使用哪些函数在代码中进行搜索?
FindElementBy
此外,是否填写用户名和密码字段,单击“登录”,然后单击下一页上的相应链接等,是实现此目的的最佳方法吗?我 认为 登录后,应该可以为我需要的每个文件获取一个链接集合,然后直接下载每个链接,但是我不确定是否可以做到这一点。
一些注意事项:
Sub
登录功能位于中iframe。您必须将硒的焦点切换到该iframe,然后再试一次,它应该可以工作。
iframe
您可以尝试以下方法:
Driver.switchtoframe (0) Driver.FindElementById("UserName")
有关Web设计的一些知识在处理硒自动化方面可以有很长的路要走,但是只要具备一些基本知识,您就可以轻松完成工作。
您应该寻找什么元素取决于您要实现的目标。如果要在文本字段中输入内容,则应查找<input type="text">元素,对于表格,则需要查找<table>元素。
<input type="text">
<table>
我通常更喜欢通过xpath使用find元素,但是如果该元素具有唯一性id或class在网页上,则可以按类名使用find元素,也可以按id使用find元素。
id
class
您似乎在正确的道路上可以自动执行任务。