Python selenium получить "URL данных изображения" из динамического src
Python selenium как и src получить "URL данных изображения" но сам srс динамический
Я пытаюсь скачать изображения с сайта (http://www.captcha.ru) вот мой код
ele_captcha = driver.find_element(By.XPATH, "//img[@alt='CAPTCHA2']")
img_captcha_base64 = driver.execute_async_script("""
var ele = arguments[0], callback = arguments[1];
ele.addEventListener('load', function fn(){
ele.removeEventListener('load', fn, false);
var cnv = document.createElement('canvas');
cnv.width = this.width; cnv.height = this.height;
cnv.getContext('2d').drawImage(this, 0, 0);
callback(cnv.toDataURL('image/jpg').substring(22));
}, false);
ele.dispatchEvent(new Event('load'));
""", ele_captcha)
но img_captcha_base64 выдает ошибку time out
Мне нужно как-то с src получить URL данных изображения, но я не знаю как это сделать с помощью python selenium
Короче: мне нужно как-то скачать изоброжение (капча) но src динамический
Ответы (2 шт):
Автор решения: gil9red
→ Ссылка
Действия:
- Извлекаете кусок
base64у атрибутаsrcв тегеimg - Декодируете его и получаете массив байтов файла картинки
- Записывайте байты в файл
Пример:
from base64 import b64decode
img_src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=='
src = img_src.split(',')[1]
img_data = b64decode(src)
with open('red-point.png', 'wb') as f:
f.write(img_data)
На практике:
import time
from base64 import b64decode
from selenium.webdriver.common.by import By
from selenium import webdriver
ele_captcha = driver.find_element(By.XPATH, "//img[@class='styles-mobile__captchaImage--sHzh3']")
img_src = ele_captcha.get_attribute('src')
src = img_src.split(',')[1]
img_captcha = b64decode(src)
with open('captcha.jpg', 'wb') as f:
f.write(img_captcha)
solver = TwoCaptcha(api_key)
result = solver.normal('captcha.jpg')
time.sleep(30)
Автор решения: destr
→ Ссылка
Всё, я разобрался как мне скачать капчу, ну не скачать а сделать её скриншот, надеюсь он вам поможет как мне (бился над этим 3 дня)
from PIL import Image
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
ele_captcha = driver.find_element(By.XPATH, "//img[@class='styles-mobile__captchaImage--sHzh3']")
src = ele_captcha.get_attribute('src')
img_captcha = ele_captcha.screenshot_as_png
with open('captcha.jpg', 'wb') as f:
f.write(img_captcha)
img = Image.open('captcha.jpg')
solver = TwoCaptcha(api_key)
result = solver.normal('captcha.jpg')
time.sleep(30)