我很困惑为什么我必须发送两次“Ctrl+t”键才能成功打开新选项卡。
修饰键应位于第一个参数中,键位于第二个参数中:
driver.SendKeys Keys.Control, "t"
对于您的情况,更好的方法是使用一些 Javascript 打开一个新窗口:
Private Keys As New selenium.Keys
Private driver As New selenium.ChromeDriver
Sub test()
Const JS_NEW_WINDOW = "window.open(arguments[0], name);"
driver.Get "http://www.google.com/"
For i = 0 To 9
If i Then
driver.ExecuteScript JS_NEW_WINDOW, "http://www.google.com/"
driver.SwitchToNextWindow
driver.FindElementById("lst-ib").SendKeys "some text " & i
End If
Next
End Sub
为什么我必须在打开新选项卡后添加 selenium.SwitchToNextWindow,否则下一个网址将在原始选项卡上打开,而不是在新选项卡上打开?
打开新窗口时,驱动程序的上下文保持不变。您必须明确告诉驱动程序您要在另一个窗口上进行操作。
通常在打开 3~5 个 url 后,vba 会弹出“内存不足”错误并停止加载下一个 url。但是如果我在调试环境中逐行运行代码,所有10个url都可以成功打开。为什么?
可能是因为一旦页面完全加载,一些内存就会被释放。但由于您要连续加载所有页面,因此可能不会给浏览器留下足够的时间来管理其内存。
我会尝试禁用插件(如果有)(尤其是 Flash)并添加一些等待:
Dim driver As New Selenium.ChromeDriver
driver.SetPreference "plugins.plugins_disabled", Array("Adobe Flash Player")
For i = 0 To 9
driver.Get "http://www.google.com/"
Waiter.wait 500 ' waits 500ms
Next
我在谷歌上搜索到,如果我希望 chrome 在完成运行宏后不退出,我必须在 sub 之外声明对象 selenium,尽管我不太明白原因。有人可以帮我简单地解释一下吗?
一旦不再使用保存驱动程序的变量,驱动程序就会自动终止。
检查此链接以获取有关变量和范围的更多信息:https://support.microsoft.com/en-gb/kb/141693。
因此,为了使驱动程序在程序之外保持活动状态,必须在程序之外声明它:
Dim driver As Selenium.ChromeDriver
Sub Main
Set driver = New Selenium.ChromeDriver
driver.Get "http://www.google.com/"
End Sub