2015-09-17 16 views
6

Sto utilizzando il modulo splinter 0.7.3 in python 2.7.2 su una piattaforma Linux per analizzare un elenco di directory su un sito Web utilizzando il browser Firefox predefinito.Splinter salva il codice HTML senza corpo

Questo è il frammento di codice che consente di scorrere l'elenco web impaginato facendo clic sul link 'Next' nel codice 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 

so che i collegamenti stanno lavorando, come sto vedendo in uscita che assomiglia a questo:

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: [] 

Quando l'html viene salvato ad ogni pagina utilizzando f.write(browser.html.encode('utf-8')) funziona benissimo per la prima pagina. Nelle pagine successive, anche se posso vedere le pagine resi in Firefox, sia il file html/regiser_...html è vuoto o il tag body manca in questo modo:

<!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> 

Si tratta di una caratteristica nota di salvare html da splinter? C'è un modo migliore per farlo?

+0

ho appena provato l'aggiornamento vers di mio Mint Lisa di Firefox da 7.0.1 a 20.0. Il problema persiste ancora. – ChrisGuest

risposta

3

Sembra davvero un problema di temporizzazione - si sta ottenendo il sorgente della pagina quando la pagina non è completamente carica. Ci sono diversi modi per affrontare il problema:

  • attesa per il bodyto be present:

    browser.is_element_present_by_tag("body", wait_time=5) 
    
  • aumentare il page load timeout - mettere questo subito dopo aver inizializzato l'oggetto browser:

    browser.driver.set_page_load_timeout(10) # 10 seconds 
    
+0

Voglio solo confermare che hai ricevuto Bounty. Sono in vacanza e lo faccio tramite il mio telefono. – ChrisGuest

+0

@ChrisGuest grazie, ha ottenuto la grazia. Spero che la risposta abbia aiutato. – alecxe