seleniumを使って部分的な領域をスクショする方法を(無理やり)つくりました。
selenium.webdriver.chrome.webdriver.WebDriver
にもsave_screenshot()
というメソッドがありますが欲しい位置が取得できないという問題がありました。
全画面をスクショする方法も検索で出てきましたが、不必要な領域が多く含まれてしまいます。
そこで「html2canvasという特定タグ領域をcanvas型に変換するjavacriptのライブラリをselenium上で実行」するという方法をとった。
# coding:utf-8 from time import sleep from selenium import webdriver # ページを開く url = 'https://suumo.jp/chintai/jnc_000066460566/?bc=100240153276' browser = webdriver.Chrome('./chromedriver') browser.get(url) # javascript 実行 with open('html2canvas.js', 'r') as h2c, open('jquery-3.6.0.min.js', 'r') as jq, open('sample.js', 'r') as f: browser.execute_script(h2c.read()) browser.execute_script(jq.read()) browser.execute_script(f.read()) sleep(10) browser.close()
sample.js
targetElement = $('div.section.l-space_small').eq(1); html2canvas(targetElement[0]).then(canvas => { let downloadElement = document.createElement('a'); downloadElement.href = canvas.toDataURL(); downloadElement.download = 'full.png'; downloadElement.click(); });
これでsuumoの「物件概要」が画像形式で取得できます。
