批量下载网页图片常见场景和解决方案
批量下载网页图片到本地
元素捕获
以京东商品搜索页为例,捕获这个页面上的图片相似元素组,捕捉图片时,影刀会提示捕获的是“图像”。
点击“捕获相似元素”捕获另一张图片,得到网页上所有结果图片的相似元素组。
①
按 F12 检查这些元素的源代码可以发现,图片链接在这个元素的 src 属性中。
可以用指令「获取相似元素列表(web)」的功能“获取元素属性”来批量获取到。
注意:src 属性可能不带 HTTP 的链接前缀,所以需要先拼接后才能正常下载图片。
流程执行逻辑:获取已打开的网页对象 -> 获取当前用户桌面的路径 -> 在已打开的网页对象中批量获取结果图片相似元素的 src 属性的文本,保存在web_element_list
中 -> 对web_element_list
循环,在当前循环项前拼接https:
后用 HTTP 下载指令依次下载到桌面上 111 文件夹中
②
也可以在网页元素上执行 JavaScript 获取到 src 属性的内容,不需要拼接 https:
:
JavaScript 代码如下:
function (element, input) {
return element.src;
}
③
如果不只需要结果图片,而是需要下载网页上所有图片,可以先随便捕捉一张图片,然后打开元素编辑,勾选掉所有其他节点,只留最后一级img
节点,再次校验元素,可以发现校验到了网页上所有图片元素。
④
如果只需要一个区域内的所有图片,可以在获取元素时关联父元素。比如只需要“选择颜色”区域中不同颜色商品的小图片,可以在用③获取所有图像元素时关联“选择颜色”这个区域的元素(需要先获取这个父元素的元素对象)。
父元素捕获:
需要先获取父元素的对象。
获取到父元素的对象用来下一步进行关联。
⑤
有时可能需要同时获取图片和其他对应信息,这个时候需要“批量数据抓取”指令。详见批量数据抓取指令文档。
用批量数据抓取指令抓取图片时,可以直接获取到图片链接。
执行效果:
如何获取京东详情页图片链接
问题描述
京东商品详情页的图片有部分无法直接通过获取元素信息得到,图片链接没有出现在src
属性或源代码中,而出现在style
中。
解决方案:
通过 JavaScript 获取图片链接。
function (element, input) {
var url = getComputedStyle(element, null)['background-image'];
return url.substr(5, url.length-7)
}
function (element, input) {
style = element.currentStyle || window.getComputedStyle(element, false);
bi = style.backgroundImage.slice(5, -2);
return bi;
}
参数说明
操作目标:选择图片元素
web_js_result
:图片链接