我必须登录SnapSurveys并每月下载20多个文件。已经是一个繁琐的过程,我现在必须每周一次,而且手动完成它将是徒劳的,所以我想自动化它并安装Selenium来做到这一点。我使用SeleniumIDE(在FireFox中)跟踪了整个过程,所以我知道我想做什么,以及如何做的基础知识,然而,我遇到了一个绝对的砖墙试图理解网页实现它的结构。
在Chrome和&amp ;;中使用开发工具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)
但这只会给我屏幕顶部的面包屑,我不确定如何从那里获得任何有用的东西。
显然,我对网页设计的理解还不足以找到我应该寻找的任何线索,但我认为我可以通过它来试验和错误,而不是一点点挫折。
我需要在页面源中查找哪些元素,以及我需要使用哪个FindElementBy
函数在代码中搜索它?
此外,填写UserName&amp;密码字段,单击“登录”,然后单击下一页上的相应链接等,这是最好的方法吗?我认为一旦我登录,我应该能够获得我需要的每个文件的链接集合并直接下载每个链接,但我不能100%肯定我是否可以这样做与否。
一些注意事项:
Sub
结束时关闭了浏览器。再一次,我只是在测试,试图在黑暗中找到自己的方式。答案 0 :(得分:1)
登录功能位于iframe
内。你必须将selenium的焦点切换到那个iframe,然后再试一次,它应该可以工作。
你可以试试这个:
Driver.switchtoframe (0)
Driver.FindElementById("UserName")
有关网页设计的一些知识在处理硒自动化方面可以帮助很长时间,但只需一些基本知识,您就可以轻松完成工作。
你应该寻找什么元素取决于你想要达到的目标。如果您想在文本字段中输入内容,则应该查找<input type="text">
元素,对于表格,您需要查找<table>
元素。
我通常更喜欢使用xpath的find元素,但如果元素在网页上有唯一的id
或class
,则可以按类名使用find元素或按ID查找元素。
您似乎正在走上正确的道路,以实现自动化任务。