- // ==UserScript==
- // @name 搜索引擎自动加载下一页
- // @namespace http://tampermonkey.net/
- // @home-url https://github.com/jueserencai/search-engines-next-page
- // @description 搜索引擎自动加载下一页,包括baidu sogou bing 360so
- // @version 0.0.2
- // @author 绝色人才
- // @include https://www.sogou.com/web*
- // @include https://cn.bing.com/search*
- // @include https://www.baidu.com/s*
- // @include https://www.so.com/s*
- // @require https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js
- // @run-at document-end
- // @connect *
- // ==/UserScript==
-
-
- (function () {
- 'use strict';
-
- // console.log("ok1");
- /* 返回网址对应的搜索引擎类,包含ajax参数,更新下一页码、查询关键词等的方法 */
- function Config() {
- this.sogou = function () {
- // 类型1是搜索引擎
- this.type = 1;
- this.config = {
- url: "https://www.sogou.com/web",
- data: {
- ie: "utf8",
- query: "",
- page: 1,
- },
- getOrPost: "GET",
- parentNodeName: "#main",
- contentNodeName: ".results",
- inputId: "#upquery",
- };
- let sogouObj = this;
- this.nextPage = function () {
- sogouObj.config.data.page += 1;
- };
- this.resetPage = function () {
- sogouObj.config.data.page = 1;
- };
- this.getQuery = function() {
- return sogouObj.config.data.query;
- };
- this.updateQuery = function(queryString) {
- sogouObj.config.data.query = queryString;
- };
- };
-
- this.bing = function() {
- // 类型1是搜索引擎
- this.type = 1;
- this.config = {
- url: "https://cn.bing.com/search",
- data: {
- q: "",
- first: 0,
- },
- getOrPost: "GET",
- parentNodeName: "#b_results",
- contentNodeName: ".b_algo",
- inputId: "#sb_form_q",
- };
- let bingObj = this;
- this.nextPage = function () {
- return bingObj.config.data.first += 10;
- };
- this.resetPage = function () {
- bingObj.config.data.first = 0;
- };
- this.getQuery = function() {
- return bingObj.config.data.q;
- };
- this.updateQuery = function(queryString) {
- bingObj.config.data.q = queryString;
- };
-
- (function() {
- // 隐藏第一页底部的页码
- $(bingObj.config.parentNodeName).children().slice(-3).hide();
- })();
- };
-
- this.baidu = function() {
- // 类型1是搜索引擎
- this.type = 1;
- this.config = {
- url: "https://www.baidu.com/s",
- data: {
- ie: "utf-8",
- wd: "",
- pn: 0,
- },
- getOrPost: "GET",
- parentNodeName: "#content_left",
- contentNodeName: ".result",
- inputId: "#kw",
- };
- let baiduObj = this;
- this.nextPage = function () {
- baiduObj.config.data.pn += 10;
- };
- this.resetPage = function () {
- baiduObj.config.data.pn = 0;
- };
- this.getQuery = function() {
- return baiduObj.config.data.wd;
- };
- this.updateQuery = function(queryString) {
- baiduObj.config.data.wd = queryString;
- };
-
- (function() {
- // 页面中点击搜索按钮,重置页码
- $("#su").click(function() {
- baiduObj.resetPage();
- });
- })();
- };
-
- this.so360 = function() {
- // 类型1是搜索引擎
- this.type = 1;
- this.config = {
- url: "https://www.so.com/s",
- data: {
- q: "",
- pn: 1,
- },
- getOrPost: "GET",
- parentNodeName: "#main > .result",
- contentNodeName: ".res-list",
- inputId: "#keyword",
- };
- let so360Obj = this;
- this.nextPage = function () {
- so360Obj.config.data.pn += 1;
- };
- this.resetPage = function () {
- so360Obj.config.data.pn = 1;
- };
- this.getQuery = function() {
- return so360Obj.config.data.q;
- };
- this.updateQuery = function(queryString) {
- so360Obj.config.data.q = queryString;
- };
- };
-
- // 根据网址返回对应的配置类
- // return new this.bing();
- let configObj = this;
- return (function() {
- let host = window.location.host;
- let reg = /\.[a-z|0-9]+\.com/;
- let res = reg.exec(host)[0];
- res = res.substring(1, res.length-4);
- if (res == "sogou") {
- return new configObj.sogou();
- } else if (res == "bing") {
- return new configObj.bing();
- } else if (res == "baidu") {
- return new configObj.baidu();
- } else if (res == "so") {
- return new configObj.so360();
- }
- })();
- };
- var searchEngine = new Config();
- // console.log("ok2");
-
- /* 加载下一页数据,插入当前页 */
- function PreLoader() {
- let preLoaderObj = this;
- // 预处理
- this.preprocessing = function(searchEngine) {
- // 更新查询字符串,页码
- let queryString = $(searchEngine.config.inputId).val();
- let oldQueryString = searchEngine.getQuery();
- searchEngine.updateQuery(queryString);
- if (oldQueryString == "") {
- searchEngine.nextPage();
- }else if (oldQueryString != queryString) {
- searchEngine.resetPage();
- }
- };
- this.loadNextPage = function(callback) {
- // 调用预处理
- preLoaderObj.preprocessing(searchEngine);
-
- // ajax请求下一页,并插进当前页中
- $.ajax({
- url: searchEngine.config.url,
- type: searchEngine.config.getOrPost,
- data: searchEngine.config.data,
- success: function(data, status) {
- let contentNode = $(data).find(searchEngine.config.parentNodeName).find(searchEngine.config.contentNodeName);
- let $div = $(searchEngine.config.parentNodeName);
- // 下一页内容插入当前页末尾
- $div.append(contentNode);
- // 两页之间添加分割线
- $div.append(`
- <div style="height: 20px;"><HR style="FILTER: progid:DXImageTransform.Microsoft.Glow(color=#987cb9,strength=10)" width="100%" color=#987cb9 SIZE=1></div>
- `);
- searchEngine.nextPage();
-
- // 调用滚动到底部检测
- callback();
- },
- error: function(e) {
- if (e.status == 404) {
- $(searchEngine.config.parentNodeName).append(`<p style="text-align: center; font-size: 18px;">已完</p>`);
- }
- },
- });
- };
- }
- var preLoader = new PreLoader();
- // console.log("ok3");
-
- /* 滚动到底部检测,判断是否要插入下一页 */
- (function scrollLoadPage() {
- $(window).unbind("scroll").scroll(function() {
- let scrollTop = $(this).scrollTop(); //获取滚动条到顶部的距离
- let windowHeight = window.screen.height * 1.5; //获取窗口的高度
- let documentHeight = $(document).height(); //获取文档区域高度
-
- // console.log(scrollTop, windowHeight, documentHeight);
- if (scrollTop + windowHeight >= documentHeight) {
- $(this).unbind("scroll");
- preLoader.loadNextPage(scrollLoadPage);
- }
- });
- })();
- })();