Pytanie Pobierz obraz z pytonem selenowym


Chcę uzyskać obraz captcha z przeglądarki. Mam URL tego obrazu, ale ten obraz zmienia każdy zaktualizowany czas (URL jest stały).

Czy istnieje jakieś rozwiązanie pozwalające uzyskać obraz z przeglądarki (np. Przycisk "zapisz obraz jako")?

Z drugiej strony uważam, że powinna to być praca:

  1. pobierz zrzut ekranu przeglądarki
  2. uzyskać pozycję obrazu
  3. przycinaj captcha z ekranu za pomocą opencv

link dynamicznego capcha - połączyć

Problem został rozwiązany poprzez zrzut ekranu:

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)

Dzięki


21
2018-06-28 09:42


pochodzenie


chcesz uzyskać zrzut ekranu przeglądarki lub obraz ze strony? - Serial
Potrzebuję obrazu captcha ze strony. Snapshoot to sposób na uzyskanie tego. - user1941407
czym jest moduł "cv"?, nevermind - patrz: opencv - brizz
@brizz Opencv jest największą i najważniejszą biblioteką obrazów opensource. Dalsze pytania Noob lepiej wysłać go do google. - erm3nda
@ erm3nda, najwyraźniej nie wiesz, jak czytać przecinki przeszłości lub zrozumieć daty. - brizz


Odpowiedzi:


Oto pełny przykład (użycie rekapski google jako celu):

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()

AKTUALIZACJA:

Problem z dynamicznie generowanymi obrazami polega na tym, że za każdym razem, gdy o to poprosisz, generowany jest nowy obraz. W takim przypadku masz kilka opcji:

  • Zrób zrzut ekranu

    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()
    
  • symulować kliknięcie prawym przyciskiem myszy + "Zapisz jako". Widzieć ten wątek po więcej informacji.

Nadzieja, która pomaga.


28
2018-06-28 10:06



google recapcha ma statyczny adres URL. połączyć - user1941407
Następnie podaj link, w którym jest dynamiczny. - alecxe
link do capcha - połączyć - user1941407
Dodatkowo, czy mógłbyś podać link do całej strony za pomocą captcha? - alecxe
W ciągu ostatnich kilku lat ... urllib się zmienił. Zamiast używać urllib.urlretrieve, musisz teraz użyć urllib.request.urlretrieve. - zwep