ブラウザからキャプチャ画像を取得したい。この画像のURLを取得しましたが、この画像は更新されるたびに変わります(URLは一定です)。
ブラウザから画像を取得するための解決策はありますか(「画像を名前を付けて保存」ボタンなど)?
一方、私はそれが仕事であるべきだと思う:
動的キャプチャのリンク- link
この問題はスクリーンショットで解決されました。
browser.save_screenshot('screenshot.png')
img = browser.find_element_by_xpath('//*[@id="cryptogram"]')
loc = img.location
image = cv.LoadImage('screenshot.png', True)
out = cv.CreateImage((150,60), image.depth, 3)
cv.SetImageROI(image, (loc['x'],loc['y'],150,60))
cv.Resize(image, out)
cv.SaveImage('out.jpg', out)
ありがとう
完全な例は次のとおりです(ターゲットとしてgoogleのrecaptchaを使用):
import urllib
from Selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.google.com/recaptcha/demo/recaptcha')
# get the image source
img = driver.find_element_by_xpath('//div[@id="recaptcha_image"]/img')
src = img.get_attribute('src')
# download the image
urllib.urlretrieve(src, "captcha.png")
driver.close()
更新:
動的に生成される画像の問題は、リクエストするたびに新しい画像が生成されることです。その場合、いくつかのオプションがあります。
スクリーンショットを撮る
from Selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://moscowsg.megafon.ru/ps/scc/php/cryptographp.php?PHPSESSID=mfc540jkbeme81qjvh5t0v0bnjdr7oc6&ref=114&w=150')
driver.save_screenshot("screenshot.png")
driver.close()
右クリック+ [名前を付けて保存]をシミュレートします。詳細については、 this thread を参照してください。
お役に立てば幸いです。
ページ全体からスクリーンショットを保存してから画像を切り取っても構いませんが、「webdriver」の「find」メソッドを使用して保存する画像を見つけ、以下のように「screenshot_as_png」プロパティを記述できます:
from Selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://www.webpagetest.org/')
with open('filename.png', 'wb') as file:
file.write(driver.find_element_by_xpath('/html/body/div[1]/div[5]/div[2]/table[1]/tbody/tr/td[1]/a/div').screenshot_as_png)
スクロールが原因でエラーが発生することもありますが、必要に応じて画像を取得するのが良い方法です。