如何从 sfpg(单个文件 PHP 图库)中查找所有 img src 属性
How to find all img src attributes from sfpg (Single File PHP Gallery)
我正在尝试在 Greasemonkey 中创建一个用户脚本来遍历以下图库中的所有 img,以从缩略图下载实际图像。
缩略图和图片的区别在于url查询参数的值;所以我们必须把cmd=thumb改成cmd=image。这很容易。
所以首先我尝试在 var 中获取所有 img 标签,然后尝试遍历所有标签,并在每次迭代中使用字符串替换将缩略图更改为图像以获取实际图像。
但是这个方法没有检索到任何img!!!在所有其他页面中,我可以找到所有 imgs,除了这个页面。
如果有人能告诉我为什么会这样,会有帮助吗?
在下面的代码片段中,首先我试图在控制台中查看所有 img 标签,但它只返回 baseURI,而不返回内部 img。我还检查了 tags.count 返回的是 1 而不是 3,因为此页面上有三张图片。除非我能找到 img,否则我无法进行下一部分,即更改 URL 和自动下载。该代码已准备就绪,可以在其他网站上使用。
// ==UserScript==
// @name Unnamed Script 629250
// @version 1
// @match http://sye.dk/sfpg/demo/index.php?sfpg=RnJ1aXRzL09yYW5nZSBGcnVpdHMvKipkN2UwYWI2MTRkZGU2MTBiYjliMzEzM2M2ZDUzODE3MTY0OWU4ZWI3YjU0MzcwMTU2ODIxN2YxMTA2NWFiOWEw
// @grant none
// ==/UserScript==
(function() {
'use strict';
var tags = document.getElementsByTagName('img');
for(var i=0;i<tags.length;i++){
console.log(tags[i])
}
})();
图像是延迟加载的 - 它们不会在页面加载时立即包含在 HTML 中。懒惰的解决方案是在尝试 select img
之前添加一个小的 setTimeout
。
另一个问题是那里不仅仅是三个 img
- 最好只 select 缩略图视图中的 .thumbbox img
。尝试这样的事情:
// ==UserScript==
// @name sveimages
// @version 1
// @match http://sye.dk/sfpg/demo/index.php?sfpg=RnJ1aXRzL09yYW5nZSBGcnVpdHMvKipkN2UwYWI2MTRkZGU2MTBiYjliMzEzM2M2ZDUzODE3MTY0OWU4ZWI3YjU0MzcwMTU2ODIxN2YxMTA2NWFiOWEw
// @grant none
// ==/UserScript==
setTimeout(() => {
const fullImageURLs = Array.from(
document.querySelectorAll('.thumbbox img'),
img => img.src.replace('cmd=thumb', 'cmd=image')
);
console.log(fullImageURLs);
}, 100);
输出:
Array(3)
0:"http://sye.dk/sfpg/demo/index.php?cmd=image&sfpg=RnJ1aXRzL09yYW5nZSBGcnVpdHMvKkNsZW1lbnRpbmVzLmpwZyowZmYzZmJlOTBlZjI3MjRhMzIwYzEzY2UxNzgzMGFlYTg3ZjM2OTg0NjZhOTM3NzllNWNhNTY1Y2FkNjczNmYy"
1:"http://sye.dk/sfpg/demo/index.php?cmd=image&sfpg=RnJ1aXRzL09yYW5nZSBGcnVpdHMvKkZ1bm55IEZydWl0LmpwZypjMmY5ZGI2ZmEzZDA1Y2UxNGE1NmQ1OGVmODA1YjhmNTU1ODU2MmZmNzZhM2RmNDUxMmFmNGRiODE5YTg1YTc1"
2:"http://sye.dk/sfpg/demo/index.php?cmd=image&sfpg=RnJ1aXRzL09yYW5nZSBGcnVpdHMvKk9yYW5nZXMuanBnKmQ2ZDlkMDc1MDYxMWI4OTA5NDk1NGE1NzEzMmE3ZDg5YWYzNDllNjQ4YTgwMzhkODg5YzhjZTViMzZlNjUwNTM"
length:3
我正在尝试在 Greasemonkey 中创建一个用户脚本来遍历以下图库中的所有 img,以从缩略图下载实际图像。
缩略图和图片的区别在于url查询参数的值;所以我们必须把cmd=thumb改成cmd=image。这很容易。
所以首先我尝试在 var 中获取所有 img 标签,然后尝试遍历所有标签,并在每次迭代中使用字符串替换将缩略图更改为图像以获取实际图像。
但是这个方法没有检索到任何img!!!在所有其他页面中,我可以找到所有 imgs,除了这个页面。
如果有人能告诉我为什么会这样,会有帮助吗?
在下面的代码片段中,首先我试图在控制台中查看所有 img 标签,但它只返回 baseURI,而不返回内部 img。我还检查了 tags.count 返回的是 1 而不是 3,因为此页面上有三张图片。除非我能找到 img,否则我无法进行下一部分,即更改 URL 和自动下载。该代码已准备就绪,可以在其他网站上使用。
// ==UserScript==
// @name Unnamed Script 629250
// @version 1
// @match http://sye.dk/sfpg/demo/index.php?sfpg=RnJ1aXRzL09yYW5nZSBGcnVpdHMvKipkN2UwYWI2MTRkZGU2MTBiYjliMzEzM2M2ZDUzODE3MTY0OWU4ZWI3YjU0MzcwMTU2ODIxN2YxMTA2NWFiOWEw
// @grant none
// ==/UserScript==
(function() {
'use strict';
var tags = document.getElementsByTagName('img');
for(var i=0;i<tags.length;i++){
console.log(tags[i])
}
})();
图像是延迟加载的 - 它们不会在页面加载时立即包含在 HTML 中。懒惰的解决方案是在尝试 select img
之前添加一个小的 setTimeout
。
另一个问题是那里不仅仅是三个 img
- 最好只 select 缩略图视图中的 .thumbbox img
。尝试这样的事情:
// ==UserScript==
// @name sveimages
// @version 1
// @match http://sye.dk/sfpg/demo/index.php?sfpg=RnJ1aXRzL09yYW5nZSBGcnVpdHMvKipkN2UwYWI2MTRkZGU2MTBiYjliMzEzM2M2ZDUzODE3MTY0OWU4ZWI3YjU0MzcwMTU2ODIxN2YxMTA2NWFiOWEw
// @grant none
// ==/UserScript==
setTimeout(() => {
const fullImageURLs = Array.from(
document.querySelectorAll('.thumbbox img'),
img => img.src.replace('cmd=thumb', 'cmd=image')
);
console.log(fullImageURLs);
}, 100);
输出:
Array(3)
0:"http://sye.dk/sfpg/demo/index.php?cmd=image&sfpg=RnJ1aXRzL09yYW5nZSBGcnVpdHMvKkNsZW1lbnRpbmVzLmpwZyowZmYzZmJlOTBlZjI3MjRhMzIwYzEzY2UxNzgzMGFlYTg3ZjM2OTg0NjZhOTM3NzllNWNhNTY1Y2FkNjczNmYy"
1:"http://sye.dk/sfpg/demo/index.php?cmd=image&sfpg=RnJ1aXRzL09yYW5nZSBGcnVpdHMvKkZ1bm55IEZydWl0LmpwZypjMmY5ZGI2ZmEzZDA1Y2UxNGE1NmQ1OGVmODA1YjhmNTU1ODU2MmZmNzZhM2RmNDUxMmFmNGRiODE5YTg1YTc1"
2:"http://sye.dk/sfpg/demo/index.php?cmd=image&sfpg=RnJ1aXRzL09yYW5nZSBGcnVpdHMvKk9yYW5nZXMuanBnKmQ2ZDlkMDc1MDYxMWI4OTA5NDk1NGE1NzEzMmE3ZDg5YWYzNDllNjQ4YTgwMzhkODg5YzhjZTViMzZlNjUwNTM"
length:3