这是我打开网站并搜索对象的代码。可能会发生找不到对象的情况,因此我必须对它的存在进行设置搜索,以便执行或不执行操作。我正在尝试这种方式,但是如果我要查找的对象,例程会崩溃....
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
我怎么了?
如果我按照QHarr的指示将bot声明为webdriver或chromedriver,则不幸出现此错误....
错误运行时33:会话未创建异常ecc。我正在使用chrome 69.0
答案 0 :(得分:2)
我看到的许多错误使我认为您已将此翻译翻译成另一种语言,或者正在使用的语法不适用于当前的selenium basic wrapper。
1)对于基本硒,以下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的文件夹级别) )。您也可以在代码中指定一条语句来指定查找驱动程序的位置。
答案 1 :(得分:1)
Set notext = bot.findElementByClassName("_3WZoe", timeoutms:=0)
您正在明确地设置timeoutms:=0
。您没有时间去尝试在页面上查找元素。从呼叫中删除该参数,给它时间在页面上查找元素。它会以默认的超时值运行(不要回想起我的想法了),但是在大多数情况下应该很快返回。您已经从上一个sendKeys
命令等待了2秒钟,因此可能(尽管不能保证)到那时元素将被加载。
此外,您要查找的元素很可能位于页面上某个框架中,并且您必须先切换到正确的框架,然后才有可能findElementBy<anyoftheoptions>
工作。
那是我遇到的最大问题之一,就是缺乏足够的HTML知识,无法快速,轻松地浏览网页源代码,从而无法“轻松完成”该项目。经过反复尝试,我还是做到了。
此外,我强烈建议您将整个程序包装在一些错误处理中,以便能够捕获错误并从错误中恢复。您正在处理Web服务器和Internet,以及LAN领域之外的一般流量-将会发生 超时。对于您的代码来说,不要为超出您控制范围之外的事情而烦恼。