Excel 硒+;VBA控制Chrome
我使用selenium+vba启动chrome,打开单元格范围(“A1:A10”)中列出的10个URL。 我对selenium并不熟悉,在尝试了很多次之后,我终于在笨拙的代码下面出来了Excel 硒+;VBA控制Chrome,excel,vba,google-chrome,selenium,Excel,Vba,Google Chrome,Selenium,我使用selenium+vba启动chrome,打开单元格范围(“A1:A10”)中列出的10个URL。 我对selenium并不熟悉,在尝试了很多次之后,我终于在笨拙的代码下面出来了 Private selenium As New ChromeDriver Sub test() Dim cell As Range Dim keys As New selenium.keys Dim pageNo As Integer pageNo = 0 selenium.Start "ch
Private selenium As New ChromeDriver
Sub test()
Dim cell As Range
Dim keys As New selenium.keys
Dim pageNo As Integer
pageNo = 0
selenium.Start "chrome", "http://www.google.com/"
For Each cell In Range("A1:A10")
If pageNo >= 1 Then
selenium.SendKeys keys.Control & "t" + keys.Control & "t"
selenium.SwitchToNextWindow
End If
selenium.Get cell.Value
pageNo = pageNo + 1
Next
End Sub
提出了几个问题:
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,否则下一个url将在原始选项卡而不是新选项卡上打开
打开新窗口时,驱动程序的上下文保持不变。你必须明确地告诉司机你想在另一个窗口上操作
通常在打开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,尽管我不太明白原因。谁能帮我简单地解释一下吗
一旦保存驱动程序的变量不再使用,驱动程序将自动终止。
检查此链接以获取有关变量和作用域的详细信息:。
因此,为了使驱动程序在程序外保持活动状态,必须在程序外声明:
Dim driver As Selenium.ChromeDriver
Sub Main
Set driver = New Selenium.ChromeDriver
driver.Get "http://www.google.com/"
End Sub
非常感谢你的清楚解释,弗洛伦特。我试过你的代码,把等待时间延长了一点,然后效果很好。再次感谢你。