2015-09-17 9 views
6

Linuxプラットフォームのpython 2.7.2splinter 0.7.3モジュールを使用して、デフォルトのFirefoxブラウザを使用してウェブサイトのディレクトリリストをスクラップします。Splinterはボディレスhtmlを保存します

これは、HTMLの[次へ]リンクをクリックすると、ページ番号付きのWebリスティングを繰り返すコードスニペットです。 HTMLはf.write(browser.html.encode('utf-8'))を使用して、各ページに保存されます

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

、それは最初のページのために正常に動作します:

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 

は、私は、このような出力を見ていてリンクが、働いていることを知っています。以降のページでは、私はどちらかhtml/regiser_...htmlファイル、Firefoxでレンダリングされたページを見ることができますがすることは空であるか、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を保存する既知の機能ですか?それを行うより良い方法はありますか?

+0

私はちょうど私のミントリサのバージョンをアップグレードしようとしたFirefoxの7.0.1から20.0に問題は依然として続きます。 – ChrisGuest

答えて

3

タイミングの問題のようです - ページが完全に読み込まれていないときにページソースを取得しています。問題に取り組むためにいくつかの方法があります。bodyto be presentため

  • 待ち:

    browser.is_element_present_by_tag("body", wait_time=5) 
    
  • page load timeoutを増やす - あなたはbrowserオブジェクトを初期化した後に、この権利を置く:

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

賞金を受け取ったことを確認したいだけです。私は休暇中で、私の電話でこれをやっています。 – ChrisGuest

+0

@ChrisGuestありがとう、賞金を手に入れました。答えが助けられたらと思っています。 – alecxe

関連する問題