2016-09-29 11 views
3

私は、Webページのスナップショット(例:http://www.baixaki.com.br/)をpythonを使って取得するためにphantomjsを使用しています。ここでpythonを使用してphantomjsで部分的なWebスナップショットを取る方法は?

コードは:入力がURLである

from selenium import webdriver 
driver = webdriver.PhantomJS() # or add to your PATH 

driver.get('http://www.baixaki.com.br/') 
driver.save_screenshot('screen6.png') # save a screenshot to disk 

、出力画像です。 問題が発生したスナップショットが狭くて長いということである:私はスクロールや全幅せずにページに収まるものだけをキャプチャしたい narrow and long snapshot

。例えば 、このような何か:私は、一般的な解決策ではありません特定のものを探しています enter image description here

あなたのご協力をお待ちしております。

+0

http://stackoverflow.com/questions/11917042/how-to-render-part-of-a-page-with-phantomjs – jinksPadlock

+0

この投稿はPythonではなく、特定のWebページを対象としています。特定の要素のID。私は、ページの特定の部分のためのPythonを使用してスナップショットを取るための汎用的なソリューションを探しています... –

+0

うーん...私が思ったほど役に立たないと思ったのは、もっと簡単だろう)。 webdriver set_window_size関数を試してみましたか?例:driver.set_window_size(1400,1000) – jinksPadlock

答えて

3

あなたは画像をトリミング試みることができる(私は、Python 3.5を使用していますので、あなたは、Python 2.xでいる場合のStringIOを使用するように調整する必要があります):クレジットが原因である

from io import BytesIO 
from selenium import webdriver 
from PIL import Image 

if __name__ == '__main__': 
    driver = webdriver.PhantomJS('C:<Path to Phantomjs>') 
    driver.set_window_size(1400, 1000) 
    driver.get('http://www.baixaki.com.br/') 
    driver.save_screenshot('screen6.png') 
    screen = driver.get_screenshot_as_png() 

    # Crop image 
    box = (0, 0, 1366, 728) 
    im = Image.open(BytesIO(screen)) 
    region = im.crop(box) 
    region.save('screen7.png', 'PNG', optimize=True, quality=95) 

クレジット: https://gist.github.com/jsok/9502024

+0

ありがとうございます。非常に有望に見えます。 –

+0

これはイメージの上をトリミングしますが、私の場合、そのページには、その非常に高いスクリーンショットの**中**にあるポップアップダイアログがあるので、2回トリミングする必要があります。 (ページヘッダを取得する)、一度は中間(ダイアログを途中で取得する)の3つです。セレンのset_window_size()の高さ**を尊重する方法が必要です。これは、「表示矩形」ではなく、スクロール可能な高さ全体をスクリーンキャプチャする必要があります。 –

関連する問題