使用selenium python下载图像

2024-04-27 11:54:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我要从浏览器获取验证码图像。我得到了这张图片的url,但是这张图片每次更新时都会改变(url是常量)。

有没有从浏览器获取图片的解决方案(如“另存图片为”按钮)?

另一方面,我认为这应该是可行的:

  1. 获取浏览器的屏幕截图
  2. 获取图片位置
  3. 使用opencv裁剪截图中的验证码

动态capcha-link的链接

通过截图解决了问题:

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)

谢谢


Tags: 图像imagebrowserurlimgpng浏览器图片
2条回答

可以从整个页面保存一个截图,然后从中剪切图像,但也可以使用“webdriver”中的“find”方法来定位要保存的图像,并编写“screenshot_a s_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)

有时它可能会因为滚动条而出错,但根据您的需要,这是获取图像的好方法。

下面是一个完整的例子(以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()

更新:

动态生成图像的问题是,每次请求时都会生成一个新图像。在这种情况下,您有几个选项:

  • 截图

    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()
    
  • 模拟右击+另存为。有关详细信息,请参见this thread

希望能有所帮助。

相关问题 更多 >