2014-12-24 3 views
1

Сравнение old_page_source с new_page_source с интервалом в 20 секунд для меня не увенчалось успехом.Как проверить, было ли содержимое веб-страницы изменено с помощью веб-редактора Selenium с Python?

# using google chrome as my browser 
driver = webdriver.Chrome('chromedriverfilepath') 

# 5 trials to see how often page gets updated. Currently unsuccesful 
for x in range(1, 5): 
    # the webpage being analyzed 
    driver.get("www.somewebsite.com") 

    old_page_source = driver.page_source 

    print time.strftime("\n\nTRIAL %d" % x + " ,first page fetched at time...." + 'Time: %H:%M:%S') 

    driver.get("www.somewebsite.com") 
    new_page_source = driver.page_source 

    # keep checking every 20 seconds until page is updated/changed 
    while old_page_source == new_page_source: 
     sleep(20) 
     driver.get("www.somewebsite.com") 
     new_page_source = driver.page_source 

print "page was changed at time.... " + time.strftime('Time: %H:%M:%S') 

ответ

0

Если вы хотите сравнить только текстовые отличия, вы можете получить текст из тега тела. Поскольку исходная страница может меняться каждый раз, когда она загружается и никогда не войдет в цикл while. (Например, на основе сеансов информации)

body = driver.find_element_by_tag_name("body") 
original = body.text 
newer = original 
while original == newer: 
    driver.get("www.somewebsite.com") 
    body = driver.find_element_by_tag_name("body") 
    newer = body.text 
    time.sleep(20) 
0

Вы не можете полагаться на page_source за то, что вы делаете. Что Selenium будет сообщать, скорее всего, будет то, что первый браузер получил. В качестве документов mention:

Получить источник последней загруженной страницы. Если страница была изменена после загрузки (например, по Javascript), нет гарантии, что возвращенный текст будет изменен. Просьба ознакомиться с документацией конкретного драйвера, используемой для определения того, отражает ли возвращенный текст текущее состояние страницы или последний текст, отправленный веб-сервером. Возвращенный источник страницы представляет собой представление базового DOM: не ожидайте, что он будет отформатирован или экранирован так же, как ответ, отправленный с веб-сервера. Подумайте об этом как о впечатлении художника.

(выделено мной. Док для привязок Java, но поведение не определяется привязок Java, а по части Селен, который живет на стороне браузера. Таким образом, это относится к привязок Python тоже.)

То, что вы должны делать, чтобы получить фактическое состояние страницы:

driver.execute_script("return document.documentElement.outerHTML") 

Это даст вам сериализацию дерева DOM всей страницы.

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