Безголовый браузер получает данные-URI изображения без потери качества - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь сохранить капчу локально с помощью браузера Chrome без головы, не хочу делать снимок экрана и без потери качества капчи.

Я придумал, как преобразовать изображениев data-URI, а затем записать его в файл.

Я пробую следующий код, он сработал и сохранил для меня изображение. Проблема в том, что капча, которую я получил, не так хороша, как та, которую я только что скачал или сделал снимок экрана.

captcha_img_element = browser.find_element_by_xpath("//span[text()='some text']//img")

img_base64 = browser.execute_script("""
    var ele = arguments[0];
    var cnv = document.createElement('canvas');
    cnv.width = ele.width; cnv.height = ele.height;
    cnv.getContext('2d').drawImage(ele, 0, 0);
    return cnv.toDataURL('image/jpeg').substring(22);    
    """, captcha_img_element)

with open("captcha_js.png", 'wb') as f:
    f.write(base64.b64decode(img_base64))

Одна с высоким качеством:

high

Тот, который я получил через код js:

low

они выглядят одинаково, но когда вы увеличиваете их, пиксели отличаются.

Так, как я могу получить data-URI первого (с высоким качеством), или есть какой-нибудь альтернативный способ без использования data-URI (в режиме безголового браузера)

1 Ответ

0 голосов
/ 26 октября 2019

Используйте ele.intrinsicWidth и ele.intrinsicHeight. Это дает фактическую ширину и высоту изображения, а не ширину / высоту элемента DOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...