Viewer for xchina ...
< Feedback on Viewer for xchina
BUG!
var pages_num = page_indicator_node(document).children.length - 2;
页数是下方按钮数-2,但是在实际网页中,仅显示 上页,1,2,3,···最后一页,下页 这6页,导致计算的总页数始终为4,所以仅能显示4*19=76张图片。
相应部分可以修改为:
var arr = document.getElementsByClassName("prev")[0].parentNode.children;
var pages_num = Number(arr[arr.length-2].text);
But。。。 这样又出现了新问题,图片多的话就会不显示。
原因是,同时发出了太多请求,导致服务器返回错误的响应,进而导致 Object.keys(pages_map).length === pages_url.length 永远不成立。
可以考虑设置最大并发请求的数量。
经过测试,设置并发数量也不行,太频繁了,要对请求频率做限制。 我是把不成功的请求记录下来,每5秒钟请求一轮。完美解决问题。
附上改动代码:
let reset_url_map = {};
for (let i = 0; i < pages_url.length; i++) {
let durl = pages_url[i];
debug_info('采集图片自', durl);
GM_xmlhttpRequest({
url: durl,
method: 'GET',
onload: (xhr) => {
let data = xhr.response;
let htmlDoc = new DOMParser().parseFromString(data, 'text/html');
let imgs = htmlDoc.getElementsByTagName('img');
let flag = false;
for (let img of imgs) {
if (img.getAttribute('class') != null && img.getAttribute('class').startsWith('cr_only')) {
flag = true;
}
}
if(flag)
update_img_set(i, getPageImages(i, htmlDoc));
else{
reset_url_map[i] = durl;
}
},
});
}
function mysleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function do_requests(reset_url){
debug_info('未完成', Object.keys(reset_url).length);
mysleep(5000).then(() => {
for (let key in reset_url) {
let durl = reset_url[key];
console.log('采集图片自', durl);
GM_xmlhttpRequest({
url: durl,
method: 'GET',
onload: (xhr) => {
let data = xhr.response;
let htmlDoc = new DOMParser().parseFromString(data, 'text/html');
let imgs = htmlDoc.getElementsByTagName('img');
for (let img of imgs) {
if (img.getAttribute('class') != null && img.getAttribute('class').startsWith('cr_only')) {
update_img_set(key, getPageImages(key, htmlDoc));
delete reset_url[key]
}
}
},
});
}
if ( Object.keys(reset_url).length!=0){
do_requests(reset_url)
}
});
}
do_requests(reset_url_map);
Thanks for your feedback, the patch workes like magic!
Thanks for your feedback, the patch workes like magic!
typo: workes => works
BUG!
var pages_num = page_indicator_node(document).children.length - 2;
页数是下方按钮数-2,但是在实际网页中,仅显示 上页,1,2,3,···最后一页,下页 这6页,导致计算的总页数始终为4,所以仅能显示4*19=76张图片。