这是我的代码来打开一个网站和搜索对象。可能会有一个对象找不到,因此我必须对其存在与否进行搜索,以便执行或不执行操作。我试着用这种方法,但是如果我要找的物体,例行程序就会崩溃.
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]:https://i.stack.imgur.com/wWKzW.jpg
我错什么了?
如果我按照QHarr的指示将bot声明为webdriver或chromedriver,我很遗憾地得到了这个错误.
错误运行时33:会话未创建异常ecc。我用的是铬69.0
发布于 2018-09-12 11:39:18
我所看到的许多错误使我认为您已经将其翻译成另一种语言,或者使用的语法不是为当前硒基包装设计的。
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应该位于环境路径上,即位于环境路径上的文件夹中,并且路径部分(对于驱动程序)应该达到但不包括.exe (即到包含的文件夹级别)。您也可以将查找驱动程序的位置指定为代码中的语句。
发布于 2018-09-12 10:57:54
Set notext = bot.findElementByClassName("_3WZoe", timeoutms:=0)您正在显式地设置timeoutms:=0。您没有时间尝试查找页面上的元素。从调用中提取该参数,给它时间来查找页面上的元素。它将在默认的超时值上运行(不要回想起它在我头上的位置),但是在大多数情况下应该会很快返回。您已经从前面的sendKeys命令等待了2秒,所以元素很可能已经加载(虽然没有保证)。
此外,您要寻找的元素完全可能驻留在页面上的某个框架中,在您有机会使用findElementBy<anyoftheoptions>之前,您必须切换到适当的框架。
这是我遇到的最大问题之一,就是缺乏足够的HTML来快速轻松地通过网页源,从而使项目“轻松”工作。我做了,经过了足够的尝试和错误,最终到达了那里。
此外,我强烈建议您将整个事件包装在一些错误处理中,以便能够捕获错误并从错误中优雅地恢复。您正在处理的web服务器和互联网和一般流量的范围以外的局域网-将有超时。如果你的代码不能被你控制的东西炸开,那就更好了。
https://stackoverflow.com/questions/52293093
复制相似问题