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