硒发现元素VBA阻止例程

时间:2018-09-12 10:32:34

标签: vba excel-vba selenium selenium-webdriver access-vba

这是我打开网站并搜索对象的代码。可能会发生找不到对象的情况,因此我必须对它的存在进行设置搜索,以便执行或不执行操作。我正在尝试这种方式,但是如果我要查找的对象,例程会崩溃....

  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

2 个答案:

答案 0 :(得分:2)

我看到的许多错误使我认为您已将此翻译翻译成另一种语言,或者正在使用的语法不适用于当前的selenium basic wrapper

1)对于基本硒,以下timeoutms不是命名参数。正确的命名参数是timeout,因此您报告的错误有些奇怪,因为您应该收到命名参数错误消息。

2)如果使用Chrome,则只需声明为Dim bot As New WebDriverNew 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领域之外的一般流量-将会发生 超时。对于您的代码来说,不要为超出您控制范围之外的事情而烦恼。