这是我打开网站和搜索对象的代码。可能发生了未找到对象的情况,因此我必须对其存在与否进行搜索,以便执行或不执行操作。我正在尝试这种方式,但如果我正在寻找的对象,例程崩溃....
Dim bot As New SeleniumWrapper.WebDriver
bot.SetProfile "C:\Users\USER\AppData\Local\Google\Chrome\User Data\Default"
bot.start "chrome", "https://website.com/"
bot.Open "/"
bot.wait 10000
bot.findElementByClassName("_20NlL").Click
bot.Wait 1000
bot.findElementByClassName("C28xL").Click
bot.Wait 1200
bot.SendKeys text
bot.Wait 2000
Dim notext As WebElement
Set notext = bot.findElementByClassName("_3WZoe", timeoutms:=0)
If notext Is Nothing Then
......[this is the error that is shown to me][1]
![1]:https://i.stack.imgur.com/wWKzW.jpg
我错了什么?
如果我将机器人声明为webdriver或chromedriver,如QHarr所示,我很遗憾地得到了这个错误....
错误运行时33:会话未创建异常ecc。我正在使用chrome 69.0
我能看到的一些错误让我觉得你已经将它翻译成另一种语言,或者使用的语法不是为当前的selenium basic wrapper设计的。
1)对于selenium basic,以下timeoutms
不是命名参数。正确的命名参数是timeout
,因此您报告的错误有些奇怪,因为您应该收到命名参数错误消息。
2)如果使用Chrome,只需声明为Dim bot As New WebDriver
或New ChromeDriver
。
3)使用硒碱的正确方法是FindElementByClass
您的sendKeys
可能应该专注于特定元素,例如
bot.findElementByClass("C28xL").SendKeys Text
您可以检查当前是否存在元素
bot.findElementByClass("_3WZoe", timeout:=0, Raise:=False)
再次,请记住导航父form/frame/iframe
标签和等待时间的关键点。
确保您使用的是最新的Chrome浏览器和ChromeDriver。 ChromeDriver应位于environmental path上,即位于环境路径上的文件夹中,路径部分(用于驱动程序)应该是.exe(但不包括.exe)(即包含文件夹级别)。您也可以在代码中指定要查找驱动程序的位置作为语句。
Set notext = bot.findElementByClassName("_3WZoe", timeoutms:=0)
你是明确设置timeoutms:=0
。你没有时间尝试在页面上找到元素。从呼叫中取出该参数,给它时间在页面上找到元素。它将在默认的超时值上运行(不记得它是什么,但在大多数情况下应该快速返回)。你已经从之前的sendKeys
命令等了2秒,所以很可能(虽然不能保证)该元素将被加载。
此外,您正在寻找的元素完全可能位于页面某处的框架中,并且您必须切换到正确的框架才能有机会使findElementBy<anyoftheoptions>
工作。
这是我遇到的最大问题之一就是缺乏足够的理解HTML来快速轻松地通过网页源来实现项目的“轻松工作”。我做了,有足够的试验和错误,最终到达那里。
此外,我强烈建议您将整个事情包装在一些错误处理中,以便能够捕获并优雅地从错误中恢复。您正在处理网络服务器和互联网以及局域网以外的一般流量 - 会有超时。如果您的代码不会因为您无法控制的事情而爆炸,那将是一件好事。