【发布时间】:2017-05-05 23:55:07
【问题描述】:
我必须登录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)
但这只会给我屏幕顶部的面包屑,我不确定如何从那里找到有用的地方。
显然,我对网页设计的了解还不够,无法知道我应该寻找什么,但我认为我可以通过尝试和错误的方式完成它,而不是这样沮丧。
我需要在页面源代码中查找哪些元素,我需要使用哪个FindElementBy 函数在代码中搜索它?
此外,填写用户名和密码字段,单击“登录”,然后单击下一页上的相应链接等。最好的方法是什么?我认为一旦我自己登录后,我应该能够为我需要的每个文件获取一组链接并直接下载每个链接,但我不能 100% 确定我是否可以做或不做。
一些注意事项:
- 是的,我意识到代码使用 IE 作为浏览器。我拥有的 FF 和 Chrome 驱动程序似乎已经过时(浏览器打开,但它不会加载网页)而且我还没有获得更新的驱动程序。目前,我不在乎我使用什么浏览器,只要我能正常运行即可。
- 是的,我意识到我在
Sub的末尾关闭了浏览器。同样,我只是在测试,试图在黑暗中找到自己的路。
【问题讨论】: