Скачать картинку с selenium python
Я хочу получить изображение captcha из браузера. У меня есть URL этой картинки, но эта картинка меняет каждое обновленное время (url постоянный).
Есть ли какое-нибудь решение для получения изображения из браузера (например, кнопка "Сохранить изображение как" )?
С другой стороны, я думаю, что это должна быть работа:
- получить снимок экрана браузера
- получить положение изображения
- crop captcha из скриншота с помощью opencv
ссылка динамической capcha - ссылка
Проблема была решена с помощью скриншота:
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)
Спасибо
Ответы
Ответ 1
Вот полный пример (с помощью 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()
UPDATE:
Проблема с динамическими сгенерированными изображениями заключается в том, что каждый раз, когда вы его запрашиваете, создается новое изображение. В этом случае у вас есть несколько вариантов:
-
сделать снимок экрана
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()
-
Имитировать правый клик + "Сохранить как". См. эту тему для получения дополнительной информации.
Надеюсь, что это поможет.
Ответ 2
Можно сохранить скриншот со всей страницы, а затем вырезать изображение, но вы также можете использовать метод "find" из "webdriver", чтобы найти изображение, которое вы хотите сохранить, и написать свойство "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)
Иногда это может привести к ошибке из-за прокрутки, но в зависимости от вашей необходимости, это хороший способ получить изображение.