1. ホーム
  2. python

[解決済み] PythonでSelenium WebDriverを使用して部分的なスクリーンショットを撮るには?

2023-06-01 05:57:50

質問

いろいろ検索してみたのですが、解決策が見つかりませんでした。以下は 同じような質問 とjavaで可能な解決策です。

Pythonで同様の解決策はありますか?

どのように解決するのですか?

Selenium 以外に、この例では PIL Imaging ライブラリも必要です。これは標準ライブラリの一つとして入れられている場合とそうでない場合がありますが、もし持っていない場合は pip install Pillow

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

fox = webdriver.Firefox()
fox.get('http://stackoverflow.com/')

# now that we have the preliminary stuff out of the way time to get that image :D
element = fox.find_element_by_id('hlogo') # find part of the page you want image of
location = element.location
size = element.size
png = fox.get_screenshot_as_png() # saves screenshot of entire page
fox.quit()

im = Image.open(BytesIO(png)) # uses PIL library to open image in memory

left = location['x']
top = location['y']
right = location['x'] + size['width']
bottom = location['y'] + size['height']


im = im.crop((left, top, right, bottom)) # defines crop points
im.save('screenshot.png') # saves new cropped image

そして最後に出力されるのは...Stackoverflowのロゴ!!!!

もちろん、これは静止画像を取得する場合には過剰な処理ですが、Javascriptを必要とするものを取得する場合には、これは有効な解決策となり得るでしょう。