如何使用Selenium和Python保存加载的图片资源?

时间:2017-09-20 16:41:25

标签: python selenium selenium-webdriver selenium-chromedriver

我使用Chrome作为浏览器,我想用Selenium将验证码保存到我的电脑上。每当我从URL请求时,我都会得到一个随机图像,但是我需要在浏览器上显示的那个图像,所以我无法再次请求它。(获取图像的src然后再发出请求,如使用requests将获得不同的图片。)

以这个网站为例(我想要获取验证码的网站有白名单,所以我不能使用它): https://unsplash.it/200/300/?random

from selenium import webdriver

if __name__ == '__main__':
    driver = webdriver.Chrome(r'F:\Dev\ChromeDriver\chromedriver.exe')
    driver.get('https://unsplash.it/200/300/?random')
    img = driver.find_element_by_tag_name('img')

现在我可以在浏览器中看到图片了,那么我该怎么做才能将同一张图片作为文件保存到我的电脑上呢?

P.S。

  • img.screenshot('image.png')使用验证码在网站上无效。

  • 保存页面的整个屏幕截图有效,但请让我知道更好的解决方案。

2 个答案:

答案 0 :(得分:1)

这将为您提供元素的屏幕截图

driver.find_element_by_css_selector('element selector here').screenshot_as_png

答案 1 :(得分:0)

我不确定Chrome,但我能够在Firefox浏览器上做同样的事情。 代码如下:

    from selenium import webdriver
    import requests
    driver=webdriver.Firefox()
    driver.get("http/https://your website")
    img=driver.find_element_by_xpath("xpath leading to your element")#locating element
    src=img.get_attribute('src')#fetch the location of image
    img=requests.get(src)#fetch image
    with open('image.jpg','wb') as writer:#open for writing in binary mode
        writer.write(img.content)#write the image