PhantomJSDriverTimes - событие нажатия кнопки в Selenium

У меня есть код VBA в Excel, который должен войти на сайт и загрузить некоторые файлы с помощью 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 ответ

Это означает, что после нажатия кнопки новая загруженная страница не возвращает завершенное состояние в течение 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

Другие вопросы по тегам