您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Load next page content until the end.
当前为
- // ==UserScript==
- // @name Mobile01 (2019/08) - Load all pages
- // @namespace http://tampermonkey.net/
- // @version 0.1
- // @description Load next page content until the end.
- // @author nio127
- // @match https://www.mobile01.com/topicdetail.php*
- // @grant none
- // ==/UserScript==
- (function() {
- //'use strict';
- var NEXT_PAGE_TYPE =
- {
- "FROM_ACTIVE" : 1,
- "FROM_NEXT" : 2
- };
- var dataset = {
- "mobile01": {
- "site" : "mobile01",
- "url_match" : "www.mobile01.com/*",
- "content_selector" : ".l-content__main>.u-gapNextV--lg",
- "content_index" : 2,
- "next_page_type" : NEXT_PAGE_TYPE.FROM_ACTIVE,
- "next_page_selector" : ".c-pagination--next",
- "active_page_selector" : ".l-pagination__page.is-active",
- "append_to" : ".l-content__main",
- "hide_selectors" : [
- ".u-gapNextV--lg>.l-navigation",
- ".u-gapNextV--lg>.l-heading"
- ],
- "sep_html" : "<hr class='page_separator' /><p class='page_info'>page: <a class='page_num'></a></p>"
- }
- };
- //var content = document.querySelector('.goods_content');
- //var page_count = content.querySelectorAll('p.news-list-btn a').length;
- //var callback_count = page_count - 1;
- var loop_count = 1;
- var show_message = function(count)
- {
- var box = document.createElement("div");
- var html = [];
- html.push('<span style="display:block;margin:0px auto; opacity:1; vertical-align:middle; text-align:center; color:#fff; ">');
- html.push(count + " pages loaded...");
- html.push('</span>');
- box.innerHTML = html.join("");
- box.style = "background:#333; opacity:0.4; width:100%; position:fixed; top:0px; padding:5px; ";
- document.body.appendChild(box);
- setTimeout(function deleteMe(){
- document.body.removeChild(box);
- }, 3000);
- };
- var load_next_page = function (rule, content)//, loop_count)
- {
- // var link_count = content.querySelectorAll('#goods-list-pages a').length;
- // var url = content.querySelectorAll('#goods-list-pages a')[(link_count-1)].href;
- if (content == undefined)
- content = document;
- var get_next_url = function(node) {
- var next_link;
- if (rule["next_page_type"] == NEXT_PAGE_TYPE.FROM_NEXT)
- {
- next_link = node.querySelector(rule["next_page_selector"]);
- }
- else if (rule["next_page_type"] == NEXT_PAGE_TYPE.FROM_ACTIVE)
- {
- next_link = node.querySelector(rule["active_page_selector"]);
- next_link = next_link.nextElementSibling;
- console.log('next_link', next_link);
- if (next_link && next_link.href == undefined)
- {
- next_link = next_link.querySelector("a");
- }
- }
- var next_url = "";
- if (next_link != undefined)
- {
- next_url = next_link.href;
- console.log("next_url = " + next_url);
- }
- else
- {
- console.log("cannot find next page link!");
- }
- return next_url;
- };
- var xhr = new XMLHttpRequest();
- var url = get_next_url(content);
- if (url == "")
- {
- //show load message
- show_message(loop_count);
- //exit
- return;
- }
- xhr.open('GET', url);
- xhr.onload = function() {
- if (xhr.status === 200) {
- //loop_count--;
- var data = xhr;
- tmp = document.createElement('div');
- tmp.innerHTML = data.responseText;
- var next_contents = tmp.querySelectorAll(rule["content_selector"]);
- var next_content;
- if (rule["content_index"] != -1)
- {
- next_content = next_contents[rule["content_index"]];
- }
- else
- {
- next_content = next_contents[0];
- }
- //hide elements
- if (rule["hide_selectors"].length)
- {
- var hide_length = rule["hide_selectors"].length;
- for (i=0; i<hide_length; i++)
- {
- var items = next_content.querySelectorAll(rule["hide_selectors"]);
- items.forEach(function(item) {
- item.style.display = "none";
- });
- }
- }
- //content.append(next_content);
- var append_to = document.querySelector(rule["append_to"]);
- //before next page content, insert separate html
- var sep_div = document.createElement("div");
- sep_div.innerHTML = rule["sep_html"];
- sep_div.id = "next_page_" + ++loop_count;
- sep_div.querySelector("a").href = url;
- sep_div.querySelector("a").innerText = loop_count;
- append_to.append(sep_div);
- //append next page content
- append_to.append(next_content);
- //check if next page exists
- load_next_page(rule, next_content);
- delete tmp;
- }
- else {
- alert('Request failed. Returned status of ' + xhr.status);
- }
- };
- xhr.send();
- };
- load_next_page(dataset["mobile01"]);
- })();