保种统计

保种统计是一个用于统计用户做种情况的脚本,可用于 NexusPHP 架构的 PT 站点。脚本可以统计用户的做种数据,并根据站点进行分类汇总,详细展示用户做种详情。可以统计的数据包括站点名称、做种数量、做种体积、平均保种人数、做种上传总量、做种下载总量、平均做种时间等。

当前为 2022-11-07 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         保种统计
// @namespace    https://github.com/tanapok/Seeding-Statistics
// @version      1.1.0
// @description  保种统计是一个用于统计用户做种情况的脚本,可用于 NexusPHP 架构的 PT 站点。脚本可以统计用户的做种数据,并根据站点进行分类汇总,详细展示用户做种详情。可以统计的数据包括站点名称、做种数量、做种体积、平均保种人数、做种上传总量、做种下载总量、平均做种时间等。
// @author       tanapok
// @match        https://wintersakura.net/userdetails.php?id=*
// @match        https://carpt.net/userdetails.php?id=*
// @match        https://hdvideo.one/userdetails.php?id=*
// @match        https://ultrahd.net/userdetails.php?id=*
// @match        *://*/userdetails.php?id=*
// @icon         https://download.wintersakura.net/uploads/2022/11/08/63693c03f0e2a.png
// @grant        none
// @license      GNU GPLv3
// ==/UserScript==

var siteData = [
	{
		siteName: 'WinterSakura',
		siteUrl: 'wintersakura.net',
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-SakuraWEB', '-SakuraSUB', '-WS', '-WScode', '-Sakura Academic'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
	{
		siteName: 'CarPT',
		siteUrl: 'carpt.net',
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-CarPT'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'HDVideo',
		siteUrl: 'hdvideo.one',
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-HDVWEB', '-HDVMV', '@HDVWEB', '@HDVMV'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'UltraHD',
		siteUrl: 'ultrahd.net',
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-UltraTV', '-UltraHD', '@UltraTV', '@UltraHD'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'QHstudIo',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-QHstudIo', '@QHstudIo'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'Audiences',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-Audies', '@Audies', '-ADE', '@ADE', '@ADWeb', '-ADWeb', '-ADAudio', '-ADEBook', '-ADMusic', '@ADAudio', '@ADEBook', '@ADMusic'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'CHDBits',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-CHDBits', '-CHDTV', '-CHDPAD', '-CHDWEB', '-CHDHKTV', '-StBOX', '-OneHD', '@CHDBits', '@CHDTV', '@CHDPAD', '@CHDWEB', '@CHDHKTV', '@StBOX', '@OneHD'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'HD Dolby',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-Dream', '-DBTV', '-HDo', '@Dream', '@DBTV', '@HDo'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'HDFans',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-HDFans', '@HDFans'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'HDSky',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-HDSky', '-HDSWEB', '-HDSTV', '-HDSPad', '-HDS', '@HDSky', '@HDSWEB', '@HDSTV', '@HDSPad', '@HDS'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'LemonHD',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-LHD', '-LeagueHD', '-LeagueNF', '-LeagueTV', '-LeagueCD', '-LeagueWEB', '-i18n', '-CiNT', '@LHD', '@LeagueHD', '@LeagueNF', '@LeagueTV', '@LeagueCD', '@LeagueWEB', '@i18n', '@CiNT'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'M-Team',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-MTeam', '-MPAD', '-tnp', '@MTeam', '@MPAD', '@tnp'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'OurBits',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-OurTV', '-PbK', '-MGs', '-Ao', '-OurBits', '-FLTTH', '-iLoveHD', '-iLoveTV', '-OuePad', '@OurTV', '@PbK', '@MGs', '@Ao', '@OurBits', '@FLTTH', '@iLoveHD', '@iLoveTV', '@OuePad'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'PTerClub',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-PTer', '-PTerWEB', '-PTerMV', '-PTerTV', '@PTer', '@PTerWEB', '@PTerMV', '@PTerTV'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'SSD',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-CMCT', '-CMCTV', '@CMCT', '@CMCTV'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'TTG',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-TTG', '-Wiki', '-NGB', '-DoA', '@TTG', '@Wiki', '@NGB', '@DoA'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'TJUPT',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-TJUPT', '@TJUPT'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'PTSBAO',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-OPS', '-FFansBD', '-FFansWEB', '-FFansTV', '-FFansDVD', '-FHDMv', '@OPS', '@FFansBD', '@FFansWEB', '@FFansTV', '@FFansDVD', '@FHDMv'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'Hares',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-Hares', '-HaresWEB', '-HaresTV', '@Hares', '@HaresWEB', '@HaresTV'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'HDChina',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-HDCTV', '-HDChina', '@HDCTV', '@HDChina'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'HDHome',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-HDH', '-HDHome', '-HDHWEB', '-HDHTV', '-HDHPad', '@HDH', '@HDHome', '@HDHWEB', '@HDHTV', '@HDHPad'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'PTHOME',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-PTH', '-PTHome', '-PTHweb', '-PTHtv', '-PTHeBook', '-PTHAudio', '-PTHmusic', '@PTH', '@PTHome', '@PTHweb', '@PTHtv', '@PTHeBook', '@PTHAudio', '@PTHmusic'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'BTSCHOOL',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-BtsHD', '-BtsTV', '-BtsPAD', '-Zone', '@BtsHD', '@BtsTV', '@BtsPAD', '@Zone'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'KeepFRDS',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-FRDS', '@FRDS'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'BeiTai',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-BeiTai', '@BeiTai'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'HD4FANS(beAst)',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-beAst', '@beAst', '-beAstTV', '@beAstTV'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'TLFbits',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-TLF', '@TLF'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'piggo',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-PiGoNF', '@PiGoNF', '-PigoHD', '@PigoHD', '-PigoWeb', '@PigoWeb'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'HHanClub',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-HHWEB', '@HHWEB'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'GainBound',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-DGB', '@DGB', '-GBWEB', '@GBWEB'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
    {
		siteName: 'PuTao',
		siteUrl: 'google.com', // 仅支持该站点的小组,并未对该站点做适配
		spiderModel: 'NexusPHP', // 此参数暂未使用
		siteGroups: ['-PuTao', '@PuTao'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
	{
		siteName: 'Others', // 未找到对应站点时的默认值
		siteUrl: '',
		spiderModel: 'NexusPHP',
		siteGroups: ['-Others'],
        userNameHTMLSelector: 'h1 > span',
		seedListSelector: '#ka1', // 做种列表区域选择器
		seedItemsSelector: 'table > tbody:first-child > tr:not(:first-child)', // 做种列表条目选择器
		seedTitleSelector: 'td:nth-child(2) > a:nth-child(1)',
		seedSizeSelector: 'td:nth-child(4)',
		seedersNumberSelector: 'td:nth-child(5)',
		seedUploadSizeSelector: 'td:nth-child(7)',
		seedDownloadSizeSelector: 'td:nth-child(8)',
		seedTimeSelector: 'td:nth-child(10)',
		hasPagination: true,
		nextPageButtonSelector: 'p.nexus-pagination:nth-child(3) > a:nth-child(2) > b:nth-child(1)',
		theLastPageFlagSelector: 'font.gray:nth-child(2) > b:nth-child(1)', // true for the end of pages
        theLastPageFlagText: '下一页',
		seedSize: 0,
        seedItemsNumber: 0,
		seedersNumber: 0,
		seedUploadSize: 0,
		seedDownloadSize: 0,
		seedTime: 0,
	},
];

// 输出 siteData 中支持的站点和小组,用于调试
function printSiteData() {
    var siteDataString = '';
    for (var i = 0; i < siteData.length; i++) {
        // 如果 siteURL 为空或为 google.com,则为未正式适配
        if (siteData[i].siteUrl == '' || siteData[i].siteUrl == 'google.com') {
            siteDataString += '- ' + siteData[i].siteName + '(未正式适配):' + siteData[i].siteGroups + '\n';
        // 正式适配的站点
        } else {
            siteDataString += '- ' + siteData[i].siteName + ':' + siteData[i].siteGroups + '\n';
        }
    }
    siteDataString = siteDataString.replace(/,/g, ', ');
    console.log(siteDataString);
}


var siteName = '';
var siteIndex = -1;
var userNameHTML = '<span>未获取到用户名</span>';
var userID = '';
var seedList = undefined;
var seedListHash = []; // 已经爬取过的做种列表的哈希值数组
var notice = undefined;
var result = undefined;
var hasPagination = false;
var nextPageButton = undefined;
var theLastPageFlag = undefined;
var uiReady = false;
var theLastPageFlagText = '';

var ssContainer = undefined;
var ssBar = undefined;

// 初始化
function init() {
	let siteUrl = window.location.href;
    // 获取站点名称及对应的索引
    for (let i = 0; i < siteData.length; i++) {
        if (siteUrl.indexOf(siteData[i].siteUrl) !== -1) {
        siteName = siteData[i].siteName;
        siteIndex = i;
        hasPagination = siteData[siteIndex].hasPagination;
        theLastPageFlagText = siteData[siteIndex].theLastPageFlagText;
        break;
        }
    }
        console.log('siteName:', siteName);
    // 从网址中匹配 userID
    let reg = /id=(\d+)/;
    let result = reg.exec(siteUrl);
    if (result) {
        userID = result[1];
    }
    // 获取用户名
    userNameHTML = document.querySelector(siteData[siteIndex].userNameHTMLSelector).innerHTML;
    console.log('userID:', userID);
}

/* MD5 哈希函数 */
/*
 * JavaScript MD5
 * https://github.com/blueimp/JavaScript-MD5
 *
 * Copyright 2011, Sebastian Tschan
 * https://blueimp.net
 *
 * Licensed under the MIT license:
 * https://opensource.org/licenses/MIT
 *
 * Based on
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */
!function(n){"use strict";function d(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function f(n,t,r,e,o,u){return d((u=d(d(t,n),d(e,u)))<<o|u>>>32-o,r)}function l(n,t,r,e,o,u,c){return f(t&r|~t&e,n,t,o,u,c)}function g(n,t,r,e,o,u,c){return f(t&e|r&~e,n,t,o,u,c)}function v(n,t,r,e,o,u,c){return f(t^r^e,n,t,o,u,c)}function m(n,t,r,e,o,u,c){return f(r^(t|~e),n,t,o,u,c)}function c(n,t){var r,e,o,u;n[t>>5]|=128<<t%32,n[14+(t+64>>>9<<4)]=t;for(var c=1732584193,f=-271733879,i=-1732584194,a=271733878,h=0;h<n.length;h+=16)c=l(r=c,e=f,o=i,u=a,n[h],7,-680876936),a=l(a,c,f,i,n[h+1],12,-389564586),i=l(i,a,c,f,n[h+2],17,606105819),f=l(f,i,a,c,n[h+3],22,-1044525330),c=l(c,f,i,a,n[h+4],7,-176418897),a=l(a,c,f,i,n[h+5],12,1200080426),i=l(i,a,c,f,n[h+6],17,-1473231341),f=l(f,i,a,c,n[h+7],22,-45705983),c=l(c,f,i,a,n[h+8],7,1770035416),a=l(a,c,f,i,n[h+9],12,-1958414417),i=l(i,a,c,f,n[h+10],17,-42063),f=l(f,i,a,c,n[h+11],22,-1990404162),c=l(c,f,i,a,n[h+12],7,1804603682),a=l(a,c,f,i,n[h+13],12,-40341101),i=l(i,a,c,f,n[h+14],17,-1502002290),c=g(c,f=l(f,i,a,c,n[h+15],22,1236535329),i,a,n[h+1],5,-165796510),a=g(a,c,f,i,n[h+6],9,-1069501632),i=g(i,a,c,f,n[h+11],14,643717713),f=g(f,i,a,c,n[h],20,-373897302),c=g(c,f,i,a,n[h+5],5,-701558691),a=g(a,c,f,i,n[h+10],9,38016083),i=g(i,a,c,f,n[h+15],14,-660478335),f=g(f,i,a,c,n[h+4],20,-405537848),c=g(c,f,i,a,n[h+9],5,568446438),a=g(a,c,f,i,n[h+14],9,-1019803690),i=g(i,a,c,f,n[h+3],14,-187363961),f=g(f,i,a,c,n[h+8],20,1163531501),c=g(c,f,i,a,n[h+13],5,-1444681467),a=g(a,c,f,i,n[h+2],9,-51403784),i=g(i,a,c,f,n[h+7],14,1735328473),c=v(c,f=g(f,i,a,c,n[h+12],20,-1926607734),i,a,n[h+5],4,-378558),a=v(a,c,f,i,n[h+8],11,-2022574463),i=v(i,a,c,f,n[h+11],16,1839030562),f=v(f,i,a,c,n[h+14],23,-35309556),c=v(c,f,i,a,n[h+1],4,-1530992060),a=v(a,c,f,i,n[h+4],11,1272893353),i=v(i,a,c,f,n[h+7],16,-155497632),f=v(f,i,a,c,n[h+10],23,-1094730640),c=v(c,f,i,a,n[h+13],4,681279174),a=v(a,c,f,i,n[h],11,-358537222),i=v(i,a,c,f,n[h+3],16,-722521979),f=v(f,i,a,c,n[h+6],23,76029189),c=v(c,f,i,a,n[h+9],4,-640364487),a=v(a,c,f,i,n[h+12],11,-421815835),i=v(i,a,c,f,n[h+15],16,530742520),c=m(c,f=v(f,i,a,c,n[h+2],23,-995338651),i,a,n[h],6,-198630844),a=m(a,c,f,i,n[h+7],10,1126891415),i=m(i,a,c,f,n[h+14],15,-1416354905),f=m(f,i,a,c,n[h+5],21,-57434055),c=m(c,f,i,a,n[h+12],6,1700485571),a=m(a,c,f,i,n[h+3],10,-1894986606),i=m(i,a,c,f,n[h+10],15,-1051523),f=m(f,i,a,c,n[h+1],21,-2054922799),c=m(c,f,i,a,n[h+8],6,1873313359),a=m(a,c,f,i,n[h+15],10,-30611744),i=m(i,a,c,f,n[h+6],15,-1560198380),f=m(f,i,a,c,n[h+13],21,1309151649),c=m(c,f,i,a,n[h+4],6,-145523070),a=m(a,c,f,i,n[h+11],10,-1120210379),i=m(i,a,c,f,n[h+2],15,718787259),f=m(f,i,a,c,n[h+9],21,-343485551),c=d(c,r),f=d(f,e),i=d(i,o),a=d(a,u);return[c,f,i,a]}function i(n){for(var t="",r=32*n.length,e=0;e<r;e+=8)t+=String.fromCharCode(n[e>>5]>>>e%32&255);return t}function a(n){var t=[];for(t[(n.length>>2)-1]=void 0,e=0;e<t.length;e+=1)t[e]=0;for(var r=8*n.length,e=0;e<r;e+=8)t[e>>5]|=(255&n.charCodeAt(e/8))<<e%32;return t}function e(n){for(var t,r="0123456789abcdef",e="",o=0;o<n.length;o+=1)t=n.charCodeAt(o),e+=r.charAt(t>>>4&15)+r.charAt(15&t);return e}function r(n){return unescape(encodeURIComponent(n))}function o(n){return i(c(a(n=r(n)),8*n.length))}function u(n,t){return function(n,t){var r,e=a(n),o=[],u=[];for(o[15]=u[15]=void 0,16<e.length&&(e=c(e,8*n.length)),r=0;r<16;r+=1)o[r]=909522486^e[r],u[r]=1549556828^e[r];return t=c(o.concat(a(t)),512+8*t.length),i(c(u.concat(t),640))}(r(n),r(t))}function t(n,t,r){return t?r?u(t,n):e(u(t,n)):r?o(n):e(o(n))}"function"==typeof define&&define.amd?define(function(){return t}):"object"==typeof module&&module.exports?module.exports=t:n.md5=t}(this);

// 判断页面是否包含做种列表且未爬取过
function checkPage() {
    seedList = document.querySelector(siteData[siteIndex].seedListSelector);
    if (seedList.innerHTML != '') {
        // 判断是否已经爬取过
        let seedListHashValue = md5(seedList.innerHTML);
        if (seedListHash.indexOf(seedListHashValue) === -1) {
            seedListHash.push(seedListHashValue);
            return true;
        }
    }
    return false;
}

// 通过 seedList 判断是否有下一页,若有,点击下一页按钮,返回 true,否则返回 false
function hasNextPage() {
    if (siteData[siteIndex].hasPagination) {
        theLastPageFlag = seedList.querySelectorAll(siteData[siteIndex].theLastPageFlagSelector);
        // 遍历 theLastPageFlag,若有一个包含 theLastPageFlagText,则说明是最后一页
        for (let i = 0; i < theLastPageFlag.length; i++) {
            if (theLastPageFlag[i].innerText.indexOf(siteData[siteIndex].theLastPageFlagText) !== -1) {
                return false;
            }
        }
        nextPageButton = seedList.querySelector(siteData[siteIndex].nextPageButtonSelector);
        nextPageButton.click();
        return true;
    }
    return false;
}

// 体积数组转为字节数
function sizeToBytes(size) {
    let sizeUnit = size[size.length - 1];
    let sizeNumber = size[0];
    let sizeUnits = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB', 'BB', 'NB', 'DB', 'CB'];
    let sizeIndex = sizeUnits.indexOf(sizeUnit);
    if (sizeIndex !== -1) {
        return sizeNumber * Math.pow(1024, sizeIndex);
    }
    return 0;
}

// 字节数转换为可读的字符串
function bytesToSize(bytes, decimals = 2) {
    if (bytes === 0) return '0 Bytes';
    let k = 1024;
    let sizes = ['Bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB', 'BiB', 'NiB', 'DiB', 'CiB'];
    let i = Math.floor(Math.log(bytes) / Math.log(k));
    return (bytes / Math.pow(k, i)).toFixed(decimals) + ' ' + sizes[i];
}

// D:HH:MM:SS 或 HH:MM:SS 或 MM:SS 或 SS 转为秒数
function timeToSeconds(time) {
    let timeArray = time.split(':');
    let timeUnits = ['D', 'H', 'M', 'S'];
    let timeUnitSeconds = [86400, 3600, 60, 1];
    let seconds = 0;
    for (let i = 0; i < timeArray.length; i++) {
        seconds += timeArray[i] * timeUnitSeconds[i];
    }
    return seconds;
}

// 秒数转换为 D天HH时MM分SS秒 或 HH时MM分SS秒 或 MM分SS秒 或 SS秒
function secondsToTime(seconds) {
    let time = '';
    let timeArray = [];
    let timeUnits = ['天', '时', '分', '秒'];
    let timeUnitSeconds = [86400, 3600, 60, 1];
    for (let i = 0; i < timeUnitSeconds.length; i++) {
        let timeUnitNumber = Math.floor(seconds / timeUnitSeconds[i]);
        if (timeUnitNumber > 0) {
            timeArray.push(timeUnitNumber + timeUnits[i]);
            seconds -= timeUnitNumber * timeUnitSeconds[i];
        }
    }
    time = timeArray.join('');
    return time;
}

// 爬取数据
function spider() {
    // 爬取数据
	let items = seedList.querySelectorAll(siteData[siteIndex].seedItemsSelector);
	items.forEach((item) => {
		let title = item.querySelector(siteData[siteIndex].seedTitleSelector).title;
		let size = item.querySelector(siteData[siteIndex].seedSizeSelector).innerText.replace(',', '').split('\n');
		let seeders = Number(item.querySelector(siteData[siteIndex].seedersNumberSelector).innerText.replace(',', ''));
		let uploadSize = item.querySelector(siteData[siteIndex].seedUploadSizeSelector).innerText.replace(',', '').split('\n');;
		let downloadSize = item.querySelector(siteData[siteIndex].seedDownloadSizeSelector).innerText.replace(',', '').split('\n');;
		let time = item.querySelector(siteData[siteIndex].seedTimeSelector).innerText.replace('天', ':').replace('小时', ':').replace('分', ':').replace('秒', '').replace(',', ''); // D:HH:MM:SS
		// 将日志更新到 result 中
        appendResult('正在解析:' + title + '<br>');
        // 遍历 siteData 中的所有站点,查找 siteGroup 中的元素包含于 title 中的首个元素
        let finded = false;
        for (let i = 0; i < siteData.length; i++) {
            for (let j = 0; j < siteData[i].siteGroups.length; j++) {
                // 不区分大小写
                if (title.toLowerCase().indexOf(siteData[i].siteGroups[j].toLowerCase()) !== -1) {
                    siteData[i].seedSize += sizeToBytes(size);
                    siteData[i].seedersNumber += seeders;
                    siteData[i].seedUploadSize += sizeToBytes(uploadSize);
                    siteData[i].seedDownloadSize += sizeToBytes(downloadSize);
                    siteData[i].seedTime += timeToSeconds(time);
                    siteData[i].seedItemsNumber++;
                    finded = true;
                    break;
                }
            }
            if (finded) {
                break;
            }
        }
        // 如果没找到,更新 Others 站点的数据
        if (!finded) {
            // 在 siteData 中找到 Others 站点的索引
            let othersIndex = siteData.findIndex((site) => {
                return site.siteName === 'Others';
            });
            siteData[othersIndex].seedSize += sizeToBytes(size);
            siteData[othersIndex].seedersNumber += seeders;
            siteData[othersIndex].seedUploadSize += sizeToBytes(uploadSize);
            siteData[othersIndex].seedDownloadSize += sizeToBytes(downloadSize);
            siteData[othersIndex].seedTime += timeToSeconds(time);
            siteData[othersIndex].seedItemsNumber++;
        }
        showResult('解析完成:' + title + '<br>');
	});
}

// 输出数据到表格
function outputData() {
    // 将站点名称、用户名称和用户的 UID 输出到 result 中
    // 使用谷歌 icon 缓存获取站点 icon 地址
    let siteIcon = 'https://www.google.com/s2/favicons?domain=' + window.location.hostname;
    showResult('站点名称:<img width="16px" src="' + siteIcon + '">&nbsp;' + siteData[siteIndex].siteName + '<br>');
    appendResult('用户名称:' + userNameHTML + '<br>');
    appendResult('用户 ID/UID:' + userID + '<br>');
    // 将 siteData 中所有站点的 做种数量 和 做种体积 输出到 result 中
    let totalSeedItemsNumber = 0;
    let totalSeedSize = 0;
    for (let i = 0; i < siteData.length; i++) {
        totalSeedItemsNumber += siteData[i].seedItemsNumber;
        totalSeedSize += siteData[i].seedSize;
    }
    appendResult('做种总量:' + totalSeedItemsNumber + '<br>');
    appendResult('做种总大小:' + bytesToSize(totalSeedSize, 3) + '<br>');

    // 输出数据到表格(优先输出当前站点,然后依次输出其他站点)
    // 在同一行输出站点名称、做种数量、做种体积、平均做种人数、做种上传总量、做种下载总量、平均做种时间,并将其原始值写入 data-value 属性中
    let table = document.createElement('table');
    table.innerHTML = '<tr><th>站点名称</th><th>做种数量</th><th>做种体积</th><th>平均做种人数</th><th>做种上传总量</th><th>做种下载总量</th><th>平均做种时间</th></tr>';
    // 输出当前站点的数据(仅当 seedItemsNumber 不为 0 时)
    if (siteData[siteIndex].seedItemsNumber !== 0) {
        let tr = document.createElement('tr');
        tr.innerHTML = '<td data-value="' + siteData[siteIndex].siteName +'">' + siteData[siteIndex].siteName 
        + '</td><td data-value="' + siteData[siteIndex].seedItemsNumber + '">' + siteData[siteIndex].seedItemsNumber 
        + '</td><td data-value="' + siteData[siteIndex].seedSize + '">' + bytesToSize(siteData[siteIndex].seedSize, 3) 
        + '</td><td data-value="' + (siteData[siteIndex].seedersNumber / siteData[siteIndex].seedItemsNumber).toFixed(2) + '">' + (siteData[siteIndex].seedersNumber / siteData[siteIndex].seedItemsNumber).toFixed(2)
        + '</td><td data-value="' + siteData[siteIndex].seedUploadSize + '">' + bytesToSize(siteData[siteIndex].seedUploadSize, 2) 
        + '</td><td data-value="' + siteData[siteIndex].seedDownloadSize + '">' + bytesToSize(siteData[siteIndex].seedDownloadSize, 2) 
        + '</td><td data-value="' + (siteData[siteIndex].seedTime / siteData[siteIndex].seedItemsNumber).toFixed(2) + '">' + secondsToTime((siteData[siteIndex].seedTime / siteData[siteIndex].seedItemsNumber)) 
        + '</td>';
        table.appendChild(tr);
    }
    // 输出其他站点的数据(仅当 seedItemsNumber 不为 0 时)
    for (let i = 0; i < siteData.length; i++) {
        if (i !== siteIndex && siteData[i].seedItemsNumber !== 0) {
            let tr = document.createElement('tr');
            tr.innerHTML = '<td data-value="' + siteData[i].siteName +'">' + siteData[i].siteName 
            + '</td><td data-value="' + siteData[i].seedItemsNumber + '">' + siteData[i].seedItemsNumber 
            + '</td><td data-value="' + siteData[i].seedSize + '">' + bytesToSize(siteData[i].seedSize, 3) 
            + '</td><td data-value="' + (siteData[i].seedersNumber / siteData[i].seedItemsNumber).toFixed(2) + '">' + (siteData[i].seedersNumber / siteData[i].seedItemsNumber).toFixed(2)
            + '</td><td data-value="' + siteData[i].seedUploadSize + '">' + bytesToSize(siteData[i].seedUploadSize, 2) 
            + '</td><td data-value="' + siteData[i].seedDownloadSize + '">' + bytesToSize(siteData[i].seedDownloadSize, 2) 
            + '</td><td data-value="' + (siteData[i].seedTime / siteData[i].seedItemsNumber).toFixed(2) + '">' + secondsToTime((siteData[i].seedTime / siteData[i].seedItemsNumber)) 
            + '</td>';
            table.appendChild(tr);
        }
    }
    // 将表格输出到 result 中
    appendResult(table.outerHTML);
    notice.style.backgroundColor = 'rgba(31,177,65,1)';
    notice.style.color = 'white';
    // #ss-container 的最小宽度设置为其当前值,防止变形
    ssContainer.style.minWidth = ssContainer.offsetWidth + 'px';
	// 表格排序功能
    // 鼠标悬停显示手型
    let tableHead = document.querySelectorAll('#ss-container table tr th');
    for (let i = 0; i < tableHead.length; i++) {
        tableHead[i].addEventListener('mouseover', function() {
            this.style.cursor = 'pointer';
        });
    }
    // 获取表格元素
    let tableElement = document.querySelector('#ss-container table');
    // 当 #ss-container 中的表格表头项被点击时,使用 sortTable 函数进行排序
    for(let i = 0; i < tableHead.length; i++) {
        tableHead[i].addEventListener('click', function() {
            sortTable(tableElement, i);
        });
    }
}

// sortTable 函数,根据对应列 col 对 table 进行排序
function sortTable(table, col) {
    // 清除所有其他列后的 ' ▲' ' ▼'
    let tableHead = document.querySelectorAll('#ss-container table tr th');
    for (let i = 0; i < tableHead.length; i++) {
        if (i !== col) {
            tableHead[i].innerHTML = tableHead[i].innerHTML.replace(' ▲', '').replace(' ▼', '');
        }
    }
	// 如果列后面有 ' ▲',则将其改为 ' ▼',并将 table 进行降序排序
	if (tableHead[col].innerHTML.indexOf(' ▲') !== -1) {
		tableHead[col].innerHTML = tableHead[col].innerHTML.replace(' ▲', ' ▼');
		sortTableDesc(table, col);
	}
	// 如果列后面有 ' ▼',则将其改为 ' ▲',并将 table 进行升序排序
	else if (tableHead[col].innerHTML.indexOf(' ▼') !== -1) {
		tableHead[col].innerHTML = tableHead[col].innerHTML.replace(' ▼', ' ▲');
		sortTableAsc(table, col);
	}
	// 如果列后面没有 ' ▲' ' ▼',则将其改为 ' ▲',并将 table 进行升序排序
	else {
		tableHead[col].innerHTML = tableHead[col].innerHTML + ' ▲';
		sortTableAsc(table, col);
	}
}

// sortTableAsc 函数,根据对应列 col 对 table 进行升序排序
function sortTableAsc(table, col) {
	let rows = table.rows;
	let arr = [];
	for (let i = 1; i < rows.length; i++) {
		arr.push(rows[i]);
	}
	arr.sort(function(a, b) {
		let aVal = a.cells[col].getAttribute('data-value');
		let bVal = b.cells[col].getAttribute('data-value');
		if (isNaN(aVal) || isNaN(bVal)) {
			return aVal.localeCompare(bVal);
		}
		else {
			return aVal - bVal;
		}
	});
	for (let i = 0; i < arr.length; i++) {
		table.appendChild(arr[i]);
	}
}

// sortTableDesc 函数,根据对应列 col 对 table 进行降序排序
function sortTableDesc(table, col) {
	let rows = table.rows;
	let arr = [];
	for (let i = 1; i < rows.length; i++) {
		arr.push(rows[i]);
	}
	arr.sort(function(a, b) {
		let aVal = a.cells[col].getAttribute('data-value');
		let bVal = b.cells[col].getAttribute('data-value');
		if (isNaN(aVal) || isNaN(bVal)) {
			return bVal.localeCompare(aVal);
		}
		else {
			return bVal - aVal;
		}
	});
	for (let i = 0; i < arr.length; i++) {
		table.appendChild(arr[i]);
	}
}

/* UI 相关 */

// 向页面注入 UI
function injectUI() {
    let ssHTML = document.createElement('div');
    ssHTML.id = 'ss-container';
    ssHTML.innerHTML = `
    <div id="ss-high-friction-bar">
        <div class="ss-graph"></div>
        <div class="ss-graph"></div>
        <div class="ss-graph"></div>
        <div class="ss-graph"></div>
    </div>
    <div id="ss-notice">
        <span id="ss-notice-text"></span>
    </div>
    <div id="ss-result"></div>
    `;
    let ssCSS = document.createElement('style');
    ssCSS.innerHTML = `
    #ss-high-friction-bar {
        display: flex;
        flex-direction: column;
        justify-content: start;
        align-items: center;
        margin-bottom: 6px;
        cursor: move;
    }
    .ss-graph {
        height: 1px;
        width: 60px;
        background-color: rgba(0, 0, 0, 0.1);
        margin-bottom: 2px;
    }
    #ss-container {
        font-family: "Helvetica Neue", Helvetica, Arial;
        font-size: 0.8rem;
        line-height: 1.45;
        color: rgba(0, 0, 0, 0.76);
        box-sizing: border-box;
        min-width: 20vw;
        max-width: 80vw;
        width: auto;
        height: auto;
        min-height: 15vh;
        max-height: 90vh;
        background-color: rgba(255, 255, 255, 0.96);
        position: fixed;
        left: 0;
        top: 0;
        border-radius: 6px;
        margin: 12px;
        padding: 12px;
        box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1);
        transition: box-shadow 0.1s ease-in-out;
        overflow: auto;
        z-index: 9999;
    }
    #ss-container:hover {
        box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.25);
        background-color: white;
    }
    #ss-notice {
        background-color: rgba(0, 0, 0, 0.05);
        width: fit-content;
        padding: 0.2rem;
        border-radius: 3px;
    }
    #ss-result {
        margin-top: 0.4rem;
    }
    #ss-result table {
        border-collapse: collapse;
        margin-top: 0.4rem;
    }
    #ss-result table, #ss-result th, #ss-result td {
        border: 0;
        /* background-color: rgba(4,150,255,1); */
    }
    #ss-result th {
        background-color: rgba(4, 142, 255, 0.96);
        color: rgba(255, 255, 255, 0.96);
    }
    #ss-result th, #ss-result td {
        text-align: left;
        padding: 0.2rem 1rem;
    }
    #ss-result tr:nth-child(odd) {
        background-color: rgba(0, 0, 0, 0.05);
    }
    #ss-result tr:nth-child(even) {
        background-color: rgba(0, 0, 0, 0.1);
    }
    #ss-result td {
        font-size: inherit;
    }
    `;
    document.body.appendChild(ssCSS);
    document.body.appendChild(ssHTML);
	notice = document.querySelector('#ss-notice');
	result = document.querySelector('#ss-result');
}
// 显示提示信息
function showNotice(text) {
	notice.style.display = 'block';
	notice.querySelector('#ss-notice-text').innerText = text;
}
// 隐藏提示信息
function hideNotice() {
	notice.style.display = 'none';
}
// 显示结果
function showResult(text) {
	result.style.display = 'block';
	result.innerHTML = text;
}
// 追加结果
function appendResult(text) {
    result.style.display = 'block';
    result.innerHTML += text;
}
// 隐藏结果
function hideResult() {
	result.style.display = 'none';
}
// UI 事件绑定
function bindUIActions() {
    ssContainer = document.querySelector("#ss-container");
    ssBar = document.querySelector("#ss-high-friction-bar");
    // 鼠标在 ssBar 上按下时,使 ssContainer 跟随鼠标移动
    ssBar.onmousedown = function (e) {
        let x = e.clientX - ssContainer.offsetLeft;
        let y = e.clientY - ssContainer.offsetTop;
        // 增大 ssContainer 的阴影效果
        ssContainer.style.boxShadow = "0 0 10px 5px rgba(0, 0, 0, 0.1)";
        document.onmousemove = function (e) {
            ssContainer.style.left = e.clientX - x - 12 + "px";
            ssContainer.style.top = e.clientY - y - 12 + "px";
            // 防止鼠标移出浏览器窗口
            if (e.clientX - x - 12 < 0) {
                ssContainer.style.left = 0;
            }
            if (e.clientY - y - 12 < 0) {
                ssContainer.style.top = 0;
            }
            if (e.clientX - x - 12 > document.documentElement.clientWidth - ssContainer.offsetWidth) {
                ssContainer.style.left = document.documentElement.clientWidth - ssContainer.offsetWidth + "px";
            }
            if (e.clientY - y - 12 > document.documentElement.clientHeight - ssContainer.offsetHeight) {
                ssContainer.style.top = document.documentElement.clientHeight - ssContainer.offsetHeight + "px";
            }
        }
    }
    // 鼠标松开时,停止移动
    document.onmouseup = function () {
        // 恢复 ssContainer 的阴影效果
        ssContainer.style.boxShadow = "0 0 5px 2px rgba(0, 0, 0, 0.1)";
        document.onmousemove = null;
    }
}


/* 主函数 */

(function() {
	'use strict';
    // 调试
    // printSiteData();

    // 初始化
    init();
    // 持续判断页面是否包含做种列表
    let timer = setInterval(() => {
        console.log('Running...');
        if (checkPage()) {
            if (!uiReady) {
                injectUI();
                bindUIActions();
                uiReady = true;
            }
            showNotice('正在统计当前页数据,请稍候...');
            // 爬取数据
            spider();
            if(hasNextPage()) {
                showNotice('当前页面统计完成,稍后自动统计下一页');
            } else {
                showNotice('统计完成,若对结果不满意,可刷新页面后重新尝试');
                outputData();
                clearInterval(timer);
            }
        } else {
            if (uiReady) {
                showNotice('当前页面数据已统计过,有可能是没有数据,或需手动切换至下一页');
            }
        }
    }, 1000);
})();