2017-02-06 1 views
3

Я использую firefox для Python3 и Selenium, чтобы отправить форму, а затем получить URL-адрес, который они затем приземлились. Я делаю это, как этотPython Selenium - Подождите, пока следующая страница не загрузится после формы submit

inputElement.send_keys(postnumber) 
inputElement.submit() 

time.sleep(5) 

# Get Current URL 
current_url = driver.current_url 
print (" URL : %s" % current_url) 

это работает большую часть времени, но иногда страница занимает больше времени, чем на 5 секунд, чтобы загрузить, и я получаю старый URL, как новая еще не загружен.

Как я должен это делать?

+1

Вы не можете получить сообщение об ошибке с 'current_url = driver.current_url' ... Это будет возвращать только вы ток или новая страница' URL' ... – Andersson

+0

Хороших point, op updated – fightstarr20

ответ

1

Try следующий подход:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait as wait 
from selenium.webdriver.support import expected_conditions as EC 

title = driver.title 
inputElement.send_keys(postnumber) 
inputElement.submit() 
wait(driver, 15).until_not(EC.title_is(title)) 
current_url = driver.current_url 
print (" URL : %s" % current_url) 

Это позволит вам подождать до 15 секунд, пока название страницы не изменяется (в случае существуют различные названия на новые и старые страницы) после отправки формы, чтобы получить новый URL. Если вы хотите обработать элемент на новой странице, то вам, возможно, придется использовать ниже код:

inputElement.send_keys(postnumber) 
inputElement.submit() 
text_of_element_on_new_page = wait(driver, 15).until(EC.presence_of_element_located((By.ID, "some_element_id"))).text 

print (" Text of element is : %s" % text_of_element_on_new_page) 
+1

Следует отметить, что это решение работает только в том случае, если новая страница имеет другое название с текущей страницы. Я работал над несколькими системами, где это не так. –

+0

yep, ответ обновлен. спасибо – Andersson

+1

WOW это супер простое решение - его можно использовать для любых 'ожидаемых_словий', поэтому в моем случае я использовал его для проверки нового URL:' WebDriverWait (driver, 15) .until (expected_conditions.url_changes ('http: // demo .com/NEWURL ')) '. Работает как шарм :) – abrasadera

5

В моем коде я создал менеджер контекста, который делает следующее:

  • получить ссылку на элемент «HTML»
  • отправить форму
  • подождать, пока ссылка на html элемент идет несвежий (что означает, что страница начала перезагрузки)
  • подождите document.readyState быть «полным» (что означает, что страница завершила начальную загрузку)

Если страница имеет содержание, заполняемый с дополнительными вызовами Ajax, я могу добавить еще ждать после того, что для элемента, который я знаю, Безразлично» t появляется сразу после четырех шагов.

Для полного описания см этого блог: How to get Selenium to wait for page load after a click

+0

Любите козу! Хороший материал там, хотя я не использую python. – JeffC

 Смежные вопросы

  • Нет связанных вопросов^_^