您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
新球体育网(球探)手机端网页,在对赛往绩和近期战绩点击输赢直接跳转到让球页面,让球水位高亮显示,并加入多场比赛的让球命中率统计功能。
当前为
// ==UserScript== // @name 新球体育网亚盘统计 // @namespace http://dol.freevar.com/ // @version 0.83 // @description 新球体育网(球探)手机端网页,在对赛往绩和近期战绩点击输赢直接跳转到让球页面,让球水位高亮显示,并加入多场比赛的让球命中率统计功能。 // @author Dolphin // @run-at document-idle // @match https://m.titan007.com/analy/Analysis/* // @match https://m.titan007.com/asian/* // @match https://m.titan007.com/Analy/Analysis/* // @grant GM_addStyle // @license MIT // ==/UserScript== (function() { 'use strict'; // 添加控制按钮 function addButtons() { const parentDiv = document.querySelector('div.btns'); // 定义按钮配置数组 const buttons = [ { id: 'statBtn', text: '统计', handler: tongJi }, { id: 'showBtn', text: '显示', handler: showTable }, { id: 'clearBtn', text: '清除', handler: clearStats } ]; // 批量创建并插入按钮 buttons.forEach(({ id, text, handler }) => { const btn = document.createElement('div'); btn.className = 'btn ctrlStats'; btn.id = id; btn.textContent = text; parentDiv.appendChild(btn); btn.addEventListener('click', handler); }); } // 样式定义 GM_addStyle(` .stats-table {border-collapse: collapse; margin:auto;} .stats-table tr:nth-child(odd) {background-color: #eee;} .stats-table td, .stats-table th { border: 1px solid #ccf; font-size: 16px; text-align: center; } .btns .btn {min-width: 40px !important;} #clearBtn {background-color:#c00;} #showBtn {background-color:#00c;} #statBtn {background-color:#0c0;} .highlight-green { background-color: #cfc; } .highlight-red { background-color: #fcc; } `); // 清除统计数据 function clearStats() { localStorage.removeItem('asianStats'); alert("已清除所有统计数据!"); } // 辅助函数:解析让球数值 function parseHandicap(handicapStr) { if (!handicapStr || handicapStr === '-') return null; if (!handicapStr.includes('/')) return parseFloat(handicapStr); let isNegative = false; if (handicapStr.startsWith('-')) { isNegative = true; handicapStr = handicapStr.substring(1); } const parts = handicapStr.split('/').map(Number); const avg = (parts[0] + parts[1]) / 2; return isNegative ? -avg : avg; } // 辅助函数:判断是否命中 function isHit(diff, handicapValue, homeOdds, awayOdds) { if (diff === handicapValue) return true; if (diff > handicapValue) return parseFloat(homeOdds) < parseFloat(awayOdds); if (diff < handicapValue) return parseFloat(awayOdds) < parseFloat(homeOdds); return false; } // 统计功能 function tongJi() { const homeElem = document.getElementById('homeScore'); const guestElem = document.getElementById('guestScore'); if (!homeElem || !guestElem) return alert("没有比分!"); const home = parseInt(homeElem.textContent); const guest = parseInt(guestElem.textContent); const diff = home - guest; // 获取所有公司数据 const stats = JSON.parse(localStorage.getItem('asianStats')) || {}; let allMiss = true; // 遍历公司 document.querySelectorAll('#oddsCompany > div[id^="main_"][id$="_0"]').forEach(companyDiv => { const companyName = companyDiv.querySelector('.companyName').textContent.trim(); const cid = companyDiv.id.split('_')[1]; if (!stats[companyName]) stats[companyName] = { initial: { count:0, hit:0 }, immediate: { count:0, hit:0 } }; // 获取盘口数据 const dataDiv = document.querySelector(`#oddsData > div[onclick*="ShowMainOddsDetail(0,${cid}"]`); if (!dataDiv) return; // 处理初盘 const initialData = dataDiv.querySelectorAll('.oddsdata')[0]; if (initialData) { const homeOdds = initialData.children[0].textContent; const handicap = initialData.children[1].textContent; const awayOdds = initialData.children[2].textContent; const handicapValue = parseHandicap(handicap); if (handicapValue !== null && homeOdds !== '-' && awayOdds !== '-') { stats[companyName].initial.count++; if (isHit(diff, handicapValue, homeOdds, awayOdds)) { stats[companyName].initial.hit++; allMiss = false; } } } // 处理即时盘 const immediateData = dataDiv.querySelectorAll('.oddsdata')[1]; if (immediateData) { const homeOdds = immediateData.children[0].textContent; const handicap = immediateData.children[1].textContent; const awayOdds = immediateData.children[2].textContent; const handicapValue = parseHandicap(handicap); if (handicapValue !== null && homeOdds !== '-' && awayOdds !== '-') { stats[companyName].immediate.count++; if (isHit(diff, handicapValue, homeOdds, awayOdds)) { stats[companyName].immediate.hit++; } } } }); localStorage.setItem('asianStats', JSON.stringify(stats)); if (allMiss) alert("本场比赛全部公司的初盘均未命中!"); window.close(); } // 显示/隐藏功能 let tablesVisible = false; function showTable() { const contentDiv = document.getElementById('content'); if (tablesVisible) { contentDiv.querySelectorAll('.stats-table').forEach(t => t.remove()); tablesVisible = false; document.getElementById('showBtn').textContent = '显示'; return; } const stats = JSON.parse(localStorage.getItem('asianStats')) || {}; // 创建表格 const createTable = (type) => { let typeCap = type === 'initial'? '初':'即'; const table = document.createElement('table'); table.className = 'stats-table'; table.innerHTML = `<tr><th>公司</th><th>${typeCap}开</th><th>${typeCap}中</th><th>命中率</th><th>主队</th><th>让球</th><th>客队</th></tr>`; Object.entries(stats).forEach(([name, data]) => { const row = table.insertRow(); const typeData = data[type]; const oddsDiv = [...document.querySelectorAll('#oddsCompany > div[id^="main_"][id$="_0"]')] .find(d => d.querySelector('.companyName').textContent.trim() === name); // 获取当前盘口数据 let home = '-', handicap = '-', away = '-'; if (oddsDiv) { const cid = oddsDiv.id.split('_')[1]; const dataDiv = document.querySelector(`#oddsData > div[onclick*="ShowMainOddsDetail(0,${cid}"]`); const targetData = dataDiv.querySelectorAll('.oddsdata')[type === 'initial' ? 0 : 1]; if (targetData) { home = targetData.children[0].textContent; handicap = targetData.children[1].textContent; away = targetData.children[2].textContent; } } // 添加数据 row.innerHTML = ` <td>${name}</td> <td>${typeData.count}</td> <td>${typeData.hit}</td> <td>${typeData.count ? (typeData.hit/typeData.count*100).toFixed(1)+'%' : '-'}</td> <td class="home-cell">${home}</td> <td>${handicap}</td> <td class="away-cell">${away}</td> `; // 设置颜色 if (home !== '-' && away !== '-') { const homeCell = row.querySelector('.home-cell'); const awayCell = row.querySelector('.away-cell'); if (parseFloat(home) < parseFloat(away)) { homeCell.style.backgroundColor = '#cfc'; awayCell.style.backgroundColor = '#fcc'; } else if (parseFloat(home) > parseFloat(away)) { homeCell.style.backgroundColor = '#fcc'; awayCell.style.backgroundColor = '#cfc'; } } }); return table; }; contentDiv.insertBefore(createTable('immediate'), contentDiv.firstChild); contentDiv.insertBefore(createTable('initial'), contentDiv.firstChild); tablesVisible = true; document.getElementById('showBtn').textContent = '隐藏'; } // 提取参数并绑定点击事件 function bindClicks() { // 选择所有包含 GoAnalyUrl(数字) 的 tr 元素 const targetTrs = document.querySelectorAll('tr[onclick*="GoAnalyUrl("]'); targetTrs.forEach(tr => { // 提取 onclick 中的数字参数 const onClickAttr = tr.getAttribute('onclick'); const paramMatch = onClickAttr.match(/GoAnalyUrl\((\d+)\)/); if (!paramMatch) return; const id = paramMatch[1]; // 提取 ID // 获取第五个 td(索引从 0 开始) const tds = tr.querySelectorAll('td'); if (tds.length < 5) return; const fifthTd = tds[4]; // 防止重复绑定 if (fifthTd._hasClickHandler) return; fifthTd._hasClickHandler = true; // 添加点击事件 fifthTd.addEventListener('click', (e) => { e.preventDefault(); e.stopPropagation(); // 阻止冒泡触发 tr 的点击事件 window.open(`https://m.titan007.com/asian/${id}.htm`, '_blank'); }); }); } // 初始化 if(location.href.startsWith('https://m.titan007.com/asian/')) { addButtons(); }else if(location.href.startsWith('https://m.titan007.com/analy/Analysis/')||location.href.startsWith('https://m.titan007.com/Analy/Analysis/')){ setTimeout(bindClicks,2000); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址