当要获取页面上的图片,我们常规的做法是:

在图片上点击鼠标右键,
然后选择 图片另存为,弹出保存窗口,
选择或输入保存的位置,
点击 确定 按钮即可。

在selenium3.0以前,我们是可以通过selenium+Autoit(或者pywinauto)的方式直接模拟这种操作:

找到图片元素,
使用鼠标ActionChains类中的context_click方法实现右键点击,
使用键盘Keys类发送键盘模拟操作,
- 先发送DOWN命令模拟键盘方向键向下,
- 再发送V键,也就是另存为的快捷键
弹出了文件保存的窗口,
通过Autoit或者pywinauto实现图片的下载。

具体代码和操作我就不写了,可以百度出很多!

但是现在selenium3.0中无法实现通过发送DOWN和V键命令的方式实现打开文件保存窗口了,因此也就没办法通过这种方式来保存文件。
不过我们可以借助selenium+requests的来完成图片的保存。

基本思路是,通过selenium获取图片的地址,再通过requests来将图片保存到本地。

requests是接口测试主要使用的第三方库,先下载requests库,

pip install requests

对于图片,有两种情况,一种是img标签,那么src属性就是图片的地址;另一种是其他标签(a,div等等),图片地址放在css的background-image属性中。
具体我们来看看每一种的情况:
第一种,我们打开百度:

对于这种直接是img标签,那么直接获取src属性即可。
由于京东的广告图片是不停变化的,因此我们例子中使用百度首页上的 图片。

from selenium import webdriver
import requestsdriver = webdriver.Chrome()
driver.implicitly_wait(30)driver.get('http://baidu.com')#  使用get_attribute()方法获取对应属性的属性值,src属性值就是图片地址。
url = driver.find_element_by_css_selector('#lg>img').get_attribute('src')
driver.quit()# 通过requests发送一个get请求到图片地址,返回的响应就是图片内容
r = requests.get(url)# 将获取到的图片二进制流写入本地文件
with open('baidu.png', 'wb') as f:# 对于图片类型的通过r.content方式访问响应内容,将响应内容写入baidu.png中f.write(r.content)

第二种,我们打开京东:

对于这种需要使用value_of_css_property()或借助js脚本才行,因为css的属性,通过selenium无法获取到。

from selenium import webdriver
import requests
import redriver = webdriver.Chrome()driver.get('http://jd.com')
driver.implicitly_wait(30)# 在js字符串中增加return,可以将js执行的值返回给selenium
# $(obj).css(attr,attrvalue),JQuery语法,获取页面对象obj的css属性值,或修改属性值
js = "return $('[href=\"//www.jd.com\"]').css('background-image')"# 获取js执行后的结果,这里的结果是"url("https://misc.360buyimg.com/mtd/pc/index/home/images/logo.v3.jpg")"
url = driver.execute_script(js)# 上面两句也可以换成使用value_of_css_property()方式
# url = driver.driver.find_element_by_class_name("mobile_static_qrcode").value_of_css_property('background')# 由于获取到的url还包含了一些其他的字符,因此需要处理
# 最好的办法就是用正则表达式来匹配其中的网址
# 匹配网址的正则表达式“(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]”
url = re.search(r'(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]', url).group(0)r = requests.get(url)# 将获取到的图片二进制流写入本地文件
with open('jd.png', 'wb') as f:# r.content 返回压缩格式的数据,一般图片之类的都是通过r.content获取f.write(r.content)driver.quit()

对语句的解释都写在了代码中。

Selenium下载页面上的图片相关推荐

  1. 使用JavaScript 中的Math对象和勾股定理公式,计算鼠标的位置与页面图片中心点的距离,根据距离对页面上的图片进行放大或缩小处理。距离远时图片放大,距离近时图片缩小

    查看本章节 查看作业目录 需求说明: 使用JavaScript 中的Math对象和勾股定理公式,计算鼠标的位置与页面图片中心点的距离,根据距离对页面上的图片进行放大或缩小处理.距离远时图片放大,距离近 ...

  2. html5使鼠标移动上去页面上的图片向左移动

    在这里插入代码片<!DOCTYPE html> <html><head><meta charset="utf-8"><titl ...

  3. selenium小练习:自写利用 selenium 下载Google高清图片、大众点评自动传头像/评论

    一. selenium 下载高清图片 1.版本介绍 python 3.7.4 selenium = 3.141.0 chromedriver=84.0.4147.30 2.保存 base64 图片格式 ...

  4. js 实现批量下载页面中的图片

    需要用到jszip.js和FileSaver.js 思路是先获取页面上的所有图片,得到src //引入js文件(vue直接npm安装) import JSZip from 'jszip' import ...

  5. java 图片上传非jsp_java问题用java代码在后台如何将jsp页面上的图片上传(是 爱问知识人...

    先到apache官方下载common-upload组件 上传 // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 上传初始化 iti ...

  6. C++ 抓取和批量下载网站上的图片或文件

    随便找个图片网页https://esports.zol.com.cn/slide/688/6885385_1.html 来练手抓取和下载图片.首先要分析html代码,看下载目标的链接命名是否有规律,有 ...

  7. java读流方式,下载网络上的图片

    本工具类支持url的list集合,具体实现如下所示: public static void download(ArrayList<String> listUrl,String downlo ...

  8. 如何下载网页上的图片

    1.打开网页 2.F12,显示网页源代码 3.ctrl + B 或者 左边有个鼠标点击它, 在你想看的图片上点击下,就能定位到那段代码 4.复制 网址,粘贴到浏览器中.另存为png格式.

  9. dropbox网页版登录_出色的UX:Dropbox在下载页面上关注细节

    dropbox网页版登录 Sometimes good UX is about being clever. Sometimes it's to make the user happy or smile ...

  10. 去除页面上的图片和视频

    因为上班的时候看一些网站,那些图片或视频就会很碍眼,所以用油猴写了个shift+Q主动屏蔽图片和视频的快捷方式,具体实现代码如下: (function() {window.addEventListen ...

最新文章

  1. 避免成为垃圾邮件_如何避免犯垃圾
  2. 数据交换格式Json与XML
  3. 随机发送n位数字+字母的验证码
  4. SAP Fiori extension hook added via note
  5. c/c++多参数的问题
  6. [推荐]VMware Workstation 6.5虚拟机(汉化补丁+注册机+原版安装文件)
  7. 对于数据,科技小白提出了灵魂三问:从哪儿来?到哪儿去?能干什么?
  8. IPTABLES常用配置
  9. 简单模拟多线程Socket通信(java)
  10. Win10文件夹大小分析、磁盘空间清理工具
  11. c51语言中 位取反指令,C51的几种位操作运算说明
  12. 使用vue element-ui 打印组件
  13. 企业架构 | TOGAF内容框架
  14. MTK modemlog分析
  15. 解析数论引论 第1章 算术基本定理
  16. [Java反序列化]—SnakeYaml反序列化
  17. 整样运用计算机考试,计算机一级考试Word的十个应用技巧
  18. 梯度弥散与梯度爆炸及其解决方法
  19. 浅探 进程的家族关系
  20. Android应用常用的加密方式

热门文章

  1. matlab 固态 机械_固态硬盘无法识别或数据删除还能恢复数据吗?
  2. VS 自带DLL注册工具注册Dll
  3. 工作站安装Ubuntu,显卡驱动,pytorch全流程
  4. Linuxbt下载工具-Transmission-支持命令行
  5. 如何用WGDI进行共线性分析(下)
  6. 计算机网络中的冗余的意思,计算机网络基础 实验四 交换网络中冗余链路.ppt
  7. 【华为机试题 HJ102】字符统计
  8. 算法系列——遗传算法matlab编程详解
  9. 极通EWEBS远程接入软件
  10. TDL信道模型和CDL信道模型