Подтвердить что ты не робот

Скачать картинку с 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)

Спасибо

4b9b3361

Ответ 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)

Иногда это может привести к ошибке из-за прокрутки, но в зависимости от вашей необходимости, это хороший способ получить изображение.