Viewer for xchina

Viewer for xchina ...

< Feedback on Viewer for xchina

Review: Good - script works

§
Posted: 2024-06-06

BUG!

var pages_num = page_indicator_node(document).children.length - 2;

页数是下方按钮数-2,但是在实际网页中,仅显示 上页,1,2,3,···最后一页,下页 这6页,导致计算的总页数始终为4,所以仅能显示4*19=76张图片。

§
Posted: 2024-06-07

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 永远不成立。
可以考虑设置最大并发请求的数量。

§
Posted: 2024-06-07

经过测试,设置并发数量也不行,太频繁了,要对请求频率做限制。 我是把不成功的请求记录下来,每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);

miku zeroAuthor
§
Posted: 2024-07-14

Thanks for your feedback, the patch workes like magic!

miku zeroAuthor
§
Posted: 2024-07-14

Thanks for your feedback, the patch workes like magic!

typo: workes => works

Post reply

Sign in to post a reply.