私はこれをたくさん検索しましたが、解決策を見つけることができませんでした。これは、Javaで可能な解決策を持つ同様の質問です。
Pythonに同様のソリューションはありますか?
この便利な python3 関数を書きました。
from base64 import b64decode
from wand.image import Image
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.common.action_chains import ActionChains
import math
def get_element_screenshot(element: WebElement) -> bytes:
driver = element._parent
ActionChains(driver).move_to_element(element).perform() # focus
src_base64 = driver.get_screenshot_as_base64()
scr_png = b64decode(src_base64)
scr_img = Image(blob=scr_png)
x = element.location["x"]
y = element.location["y"]
w = element.size["width"]
h = element.size["height"]
scr_img.crop(
left=math.floor(x),
top=math.floor(y),
width=math.ceil(w),
height=math.ceil(h),
)
return scr_img.make_blob()
表示されている要素の png 画像をバイトとして返します。制限: 要素はビューポートに収まる必要があります。
これを使用するには、ワンド モジュールをインストールする必要があります。
これを行う関数を次に示します。サイズは、crop 関数に渡す前に整数にキャストする必要があります。
from PIL import Image
from StringIO import StringIO
def capture_element(element,driver):
location = element.location
size = element.size
img = driver.get_screenshot_as_png()
img = Image.open(StringIO(img))
left = location['x']
top = location['y']
right = location['x'] + size['width']
bottom = location['y'] + size['height']
img = img.crop((int(left), int(top), int(right), int(bottom)))
img.save('screenshot.png')