PhantomJSDriverTimes Out On按钮单击Selenium中的事件

时间:2015-11-04 20:22:03

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

我在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

1 个答案:

答案 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