Сплинтер спасает бестелесный HTML

Я использую splinter 0.7.3 модуль в python 2.7.2 на платформе Linux, чтобы очистить список каталогов на веб-сайте с помощью браузера Firefox по умолчанию.

Это фрагмент кода, который просматривает нумерованный веб-список, щелкая ссылку "Далее" в html.

    links = True
    i = 0
    while links:
        with open('html/register_%03d.html' % i, 'w') as f:
            f.write(browser.html.encode('utf-8'))
        links = browser.find_link_by_text('Next')
        print 'links:', links
        if links:
            links[0].click()
        i += 1

Я знаю, что ссылки работают, так как я вижу вывод, который выглядит следующим образом:

links: [<splinter.driver.webdriver.WebDriverElement object at 0x2e6da10>, <splinter.driver.webdriver.WebDriverElement object at 0x2e6d710>]
links: [<splinter.driver.webdriver.WebDriverElement object at 0x2e6d5d0>, <splinter.driver.webdriver.WebDriverElement object at 0x2e6d950>]
links: [<splinter.driver.webdriver.WebDriverElement object at 0x2e6d710>, <splinter.driver.webdriver.WebDriverElement object at 0x2e6dcd0>]
links: []

Когда HTML сохраняется на каждой странице, используя f.write(browser.html.encode('utf-8')) это прекрасно работает для первой страницы. На последующих страницах, хотя я вижу страницы, отображаемые в Firefox, либо html/regiser_...html файл пуст или отсутствует тег body, например:

<!DOCTYPE html>
<!--[if lt IE 7]>      <html prefix="og: http://ogp.me/ns#" class="no-js lt-ie9 lt-ie8 lt-ie7"  lang="en-gb"> <![endif]-->
<!--[if IE 7]>         <html prefix="og: http://ogp.me/ns#" class="no-js lt-ie9 lt-ie8"  lang="en-gb"> <![endif]-->
<!--[if IE 8]>         <html prefix="og: http://ogp.me/ns#" class="no-js lt-ie9"  lang="en-gb"> <![endif]-->
<!--[if gt IE 8]><!-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-gb" class="no-js" prefix="og: http://ogp.me/ns#"><!--<![endif]--><head>
        <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible" />    
    ...
  </style>
  <script src="/media/com_magebridge/js/frototype.min.js" type="text/javascript"></script></head></html>

Это известная особенность сохранения html от splinter? Есть ли лучший способ сделать это?

1 ответ

Решение

Это действительно похоже на проблему синхронизации - вы получаете источник страницы, когда страница загружена не полностью. Есть несколько способов решения проблемы:

  • ждать body присутствовать:

    browser.is_element_present_by_tag("body", wait_time=5)
    
  • увеличить время загрузки страницы - установите это сразу после инициализации browser объект:

    browser.driver.set_page_load_timeout(10)  # 10 seconds
    
Другие вопросы по тегам