在一个网站,而不是我的网站,搜索结果
<a href="show?file=191719&token=r1j">
<a href="show?file=191720&token=gh5">
<a href="show?file=191721&token=98j">
.....
<a href="show?file=191733&token=ty0">
在我点击其中一个后,我转到一个页面,我填写表格,然后我去下载页面,然后点击链接:
<a href="download?file=191719&token=r1j">
我必须手动为150个文件做太长时间!
我想要的是使用脚本或其他东西,我通过获取结果页面中的文件ID直接下载所有文件并将其放入下载链接。
答案 0 :(得分:1)
您可以使用excel生成链接,将其另存为txt文件并使用带-i参数的wget下载。
答案 1 :(得分:1)
使用此javascript片段,其中http://www.that-website.com/
是该网站的网址,如果有太多,请不要一次性下载所有文件,每次下载几十个文件,指定开始和结束文件编号,< em>请注意,浏览器弹出窗口阻止程序会阻止此操作,因此您需要在浏览器的弹出窗口阻止程序中允许弹出此网页
<强> JS:强>
var fileNumber,
start = 191719,
finish = 191729;
for(fileNumber = start; fileNumber <= finish; ++fileNumber){
window.open("http://www.that-website.com/download?file=" + fileNumber);
}
<强>更新强>
由于随机令牌在网址中实现,最简单的方法是在window.open()
的多行中手动输入,如下所示:
window.open("http://www.that-website.com/download?file=191719&token=r1j");
window.open("http://www.that-website.com/download?file=191720&token=gh5");
window.open("http://www.that-website.com/download?file=191721&token=98j");
依旧几十个。
更新2: 请参阅此JSFiddle
中的示例<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<!-- COPY BUNCH OF THE URLs AND PASTE THEM IN HERE THEN RELOAD THE PAGE, THEN REPEAT OVER AND OVER UNTIL IT IS ALL DONE! -->
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
$(document).ready(function(){
$('a').each(function(){
var showLink = $(this).attr('href');
var downloadLink = showLink.replace("show?file", "download?file");
window.open("http://www.example.com/" + downloadLink);
});
});
</script>
</body>
</html>
使用上面的代码,这是一个HTML页面,在你的计算机上,将几个原始文件从该网站页面链接 - ,如:<a href="http://www.example.com/show?file=111&token=23f">TEST</a>
复制到您的本地页面并运行它,仍然是强烈建议您每次粘贴10-30个链接。
答案 2 :(得分:0)
您可以使用 XMLHttpRequest 并行下载文件作为blob,然后使用<a download>
来启动下载行为。这会有相同的原则政策限制。
总体思路是
// fetch
var xhr = new XMLHttpRequest();
xhr.addEventListener('load', function () {
var uri = URL.createObjectURL(this.response); // generate URI to access Blob
// write, see below
});
xhr.open('GET', target_file_href);
xhr.responseType = 'blob'; // state we want the target as a blob/file
xhr.send(); // send the request
// ---------------
// write
var a = document.createElement('a');
a.href = uri;
a.setAttribute('download'); // make this a download link rather than a change page
document.body.appendChild(a);
a.click();
// cleanup a, uri
这是我在ES5中编写的并行文件下载器,它限制了并发下载的次数。
function ParallelDownloader(max_parallel, retry_on_error) {
this.links = [];
this.current = 0;
this.max_parallel = max_parallel || 5;
this.retry_on_error = !!retry_on_error;
}
ParallelDownloader.prototype = Object.create(null);
ParallelDownloader.prototype.add = function (url) {
if ('splice' in url && 'length' in url)
this.links.push.apply(this.links, url);
else
this.links.push(url);
this.downloadNext();
};
ParallelDownloader.prototype.downloadNext = (function () {
function load() {
var a = document.createElement('a'),
uri = URL.createObjectURL(this.response),
cd = this.getResponseHeader('Content-Disposition'),
filename = null;
if (cd) {
cd = cd.match(/;\s+filename=(.+)/);
if (cd) filename = cd[1];
}
if (null === filename) {
cd = this.__url.match(/\/([^/]+?(?=\?|$))/);
if (cd) filename = cd[1];
}
if (null !== filename) a.setAttribute('download', filename);
else a.setAttribute('download');
a.setAttribute('href', uri);
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(uri);
--this.__parallelDownloader.current;
this.__parallelDownloader.downloadNext();
}
function error() {
--this.__parallelDownloader.current;
if (this.__parallelDownloader.retry_on_error) {
console.warn('Will retry', this.__url);
this.__parallelDownloader.unshift(this.__url);
}
this.__parallelDownloader.downloadNext();
}
return function () {
var url;
++this.current;
if (this.current > this.max_parallel || this.links.length === 0) {
--this.current;
return;
}
url = this.links.shift();
var xhr = new XMLHttpRequest();
xhr.__parallelDownloader = this;
xhr.__url = url;
xhr.addEventListener('load', load);
xhr.addEventListener('error', error);
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
this.downloadNext();
};
}());
要使用它,你会这样做,例如
var pd = new ParallelDownloader(10); // max 10 concurrent downloads
pd.add([
'/path1.txt', '/path2.pub', '/path3.pdf'
]);
// or
pd.add('/path4.txt');
pd.add('/path5.txt');
// etc
一旦添加链接并且有一个空闲插槽,下载尝试就会立即启动。 (如果你启用retry_on_error
我没有限制它,所以你可能会得到无限循环)