我在Excel中有VBA代码,应该使用Selenium登录网站并下载一些文件。我使用ChromeDriver
使用我的代码并尝试修改它以使用PhantomJSDriver
,因此我可以在程序运行时执行其他操作(运行约45分钟)。问题是当我尝试让Selenium点击登录按钮时出现超时错误:
Run-time error '101':
WebRequestTimeout:
No response from the server within 30000 seconds
有趣的是,在超时之后,我可以使用即时窗口截取屏幕截图,并且清楚地表明按钮已被点击,浏览器已进入下一页。
Dim D As New PhantomJSDriver
With D
.ExecuteScript ("window.resizeTo(1920,1080)")
.SendKeys MyKeys.Control, "0" 'Set zoom to 100% (causes errors if not 100%)
.Get "LoginPage.com"
.FindElementByName("username").SendKeys "UserName"
.FindElementByXPath("/html/body/div[@class='centreContent']/form[@id='loginForm']/input[@id='passwordDummy']").Click
.FindElementByXPath("/html/body/div[@class='centreContent']/form[@id='loginForm']/input[@id='password']").SendKeys "Password"
.TakeScreenShot.SaveAs "C:\Users\110SidedHexagon\Downloads\Capture.png" '<---Takes screenshot of login screen with uesername and password filled in
.FindElementByName("loginSubmitButton", 0.1).Click '<---Error occurs here
<--Using the immediate window taking a picture after the error breaks code execution shows login was successful-->
End With
答案 0 :(得分:0)
这意味着在单击按钮后,新加载的页面不会在30秒内返回完成状态。 这可能是由于页面中存在死资源。
您可以尝试增加服务器超时:
Dim driver As New PhantomJSDriver
driver.Timeouts.Server = 60000 ' 60 seconds
driver.Get "https://..."
driver.FindElementByName("loginSubmitButton").Click
或者您可以定义加载页面的超时并跳过错误:
Dim driver As New PhantomJSDriver
driver.Timeouts.PageLoad = 20000 ' 20 seconds
driver.Get "https://..."
On Error Resume Next
driver.FindElementByName("loginSubmitButton").Click
On Error Goto 0
要使用上面的示例获取最新版本的日期: https://github.com/florentbr/SeleniumBasic/releases/latest