Je veux obtenir l'image captcha du navigateur. J'ai une URL de cette image, mais cette image change à chaque mise à jour (l'URL est constante).
Existe-t-il une solution pour obtenir une image du navigateur (comme le bouton "enregistrer l'image sous")?
D'un autre côté, je pense que ça devrait être du travail:
lien du capcha dynamique - lien
Le problème a été résolu par capture d'écran:
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)
Merci
Voici un exemple complet (en utilisant recaptcha de google comme cible):
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()
MISE À JOUR:
Le problème avec les images générées dynamiques est qu'il y a une nouvelle image générée à chaque fois que vous la demandez. Dans ce cas, vous avez plusieurs options:
prendre une capture d'écran
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()
simuler un clic droit + "Enregistrer sous". Voir ce fil pour plus d'informations.
J'espère que cela pourra aider.
Vous pouvez enregistrer une capture d'écran de toute la page, puis couper l'image, mais vous pouvez également utiliser la méthode "find" de "webdriver" pour localiser l'image que vous souhaitez enregistrer et écrire la propriété "screenshot_as_png" comme ci-dessous :
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)
Parfois, il peut y avoir une erreur à cause du défilement, mais selon votre nécessité, c'est un bon moyen d'obtenir l'image.