我必须登录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设计的了解不足,无法提供我应该寻找的任何线索,但是我认为我可以通过尝试和错误尝试来解决此问题,而这比这要少得多。
我需要在页面源代码中寻找哪些元素,FindElementBy
需要使用哪些html" target="_blank">函数在代码中进行搜索?
此外,是否填写用户名和密码字段,单击“登录”,然后单击下一页上的相应链接等,是实现此目的的最佳方法吗?我 认为
登录后,应该可以为我需要的每个文件获取一个链接集合,然后直接下载每个链接,但是我不确定是否可以做到这一点。
一些注意事项:
Sub
。同样,我只是在测试,试图在黑暗中找到自己的路。登录功能位于中iframe
。您必须将硒的焦点切换到该iframe,然后再试一次,它应该可以工作。
您可以尝试以下方法:
Driver.switchtoframe (0)
Driver.FindElementById("UserName")
有关Web设计的一些知识在处理硒自动化方面可以有很长的路要走,但是只要具备一些基本知识,您就可以轻松完成工作。
您应该寻找什么元素取决于您要实现的目标。如果要在文本字段中输入内容,则应查找<input type="text">
元素,对于表格,则需要查找<table>
元素。
我通常更喜欢通过xpath使用find元素,但是如果该元素具有唯一性id
或class
在网页上,则可以按类名使用find元素,也可以按id使用find元素。
您似乎在正确的道路上可以自动执行任务。
我正在抓取这个网页的用户名,在滚动后加载用户 指向页面的Url:“http://www.quora.com/Kevin-Rose/followers" 我知道页面上的用户数(本例中的用户数为43812),如何滚动页面直到加载所有用户?我在互联网上搜索过同样的代码,在任何地方我都能找到几乎相同的代码行: driver.execute_script("window.scroll至(0)") 如何确定垂
问题内容: 我正在浏览Selenium WebDriver的文档,例如它可以驱动Chrome。我当时在想,“驱动” PhantomJS效率会更高吗? 有没有办法将Selenium与PhantomJS一起使用? 我的预期用途是进行网页抓取:我抓取的网站上加载了AJAX和许多可爱的JavaScript,并且我认为此设置可以很好地替代我目前使用的Scrapy Python框架。 问题答案: Phanto
问题内容: 我一直在使用Chromedriver测试Selenium,但我注意到,即使根本没有自动化功能,某些页面也可以检测到你正在使用Selenium。即使当我只是通过Selenium和Xephyr使用chrome手动浏览时,我也经常得到一个页面,指出检测到可疑活动。我已经检查了用户代理和浏览器指纹,它们与普通的chrome浏览器完全相同。 当我以普通的chrome浏览到这些站点时,一切正常,但
我需要在一个网页上滚动(例如twitter),并制作一个网站上出现的新元素的网络抓取。我试着用,和来做这个。这是我的密码 问题是我无法滚动到底部。和是相同的。但是如果我将从更改为,同样的代码可以正常工作。为什么?
我正在使用Selenium WebDriver和Java实现网站的自动化,但我陷入了这样一种情况:点击一个按钮,就会打开一个新的网页对话框,在该网页对话框中,我会执行输入值/从下拉列表中选择等操作。 问题是我无法切换到该网页对话框,甚至F12窗口不能在该网页对话框上工作。这个网站只在IE上工作。请帮帮我。 屏幕截图:在此处输入图像描述
我无法从以下网页中读取电子邮件id: 网址:https://targetstudy.com/university/2/acharya-ng-ranga-agricultural-university/ 这是我的代码