26
« Último mensaje por donguero en 19 de Abril de 2026, 18:35 »
Os dejo otros botones interesantes para sofascore.
Estos hacen que puedas quitar de la lista de partidos todos los que no tienen cuotas, y eso es porque hay muchos partidos de ligas como sub17 o sub15 que sofascore los muestra pero no son útiles para nosotros porque no aparecen en ninguna casa de apuestas y al quitarlos de la lista hace nuestro trabajo mas rápido.
El primer botón "Ocultar sin cuotas" quita de la lista todas las ligas que no tengan al menos 1 partido con cuota, no quita los partidos sin cuotas, quita las ligas que tengan todos sus partidos sin cuotas.
El segundo botón "Cargar y ocultar" muestra todas las ligas (puede tardar un poco, sobre todo en fin de semana por la cantidad de partidos) una vez termina elimina todas las ligas que no tengan al menos un partido con cuotas, , si al terminar aparece alguna liga sin cuotas simplemente vamos de nuevo al botón "Ocultar sin cuotas" y listo.
El tercer botón "Mostrar todas" vuelve a mostrar todos los partidos eliminados.
Todos las ligas que elimina vuelven a aparecer al refrescar la pagina, por lo que no es algo definitivo.
Código a usar en Tampermonkey:
// ==UserScript==
// @name Sofascore ES - Ocultar ligas sin cuotas
// @namespace https://www.sofascore.com/
// @version 1.0
// @description Oculta en la columna izquierda las ligas que no tienen ningún partido con cuotas
// @match https://www.sofascore.com/es*
// @match https://www.sofascore.com/es/*
// @grant none
// @run-at document-idle
// ==/UserScript==
(function () {
'use strict';
const PANEL_ID = 'tm-sofascore-odds-filter';
const sleep = ms => new Promise(r => setTimeout(r, ms));
function visible(el) {
if (!el || !(el instanceof Element)) return false;
const s = getComputedStyle(el);
const r = el.getBoundingClientRect();
return s.display !== 'none' && s.visibility !== 'hidden' && r.width > 0 && r.height > 0;
}
function getLeagueBlocks() {
return [
...document.querySelectorAll('div.pb_sm'),
...document.querySelectorAll('div.pb_0')
].filter(block => {
const header = block.querySelector(':scope > div.d_flex.ai_center.ps_xl.cursor_pointer');
if (!header || !visible(header)) return false;
const rect = header.getBoundingClientRect();
return rect.left < window.innerWidth * 0.45;
});
}
function hasOdds(block) {
return block.querySelectorAll('a.z_button').length > 0;
}
function hideNoOddsLeagues() {
const blocks = getLeagueBlocks();
let hidden = 0;
for (const block of blocks) {
if (hasOdds(block)) {
block.style.display = '';
block.dataset.tmOddsHidden = '0';
} else {
block.style.display = 'none';
block.dataset.tmOddsHidden = '1';
hidden++;
}
}
alert(`Ocultadas ${hidden} ligas sin cuotas.`);
}
function showAllLeagues() {
const blocks = getLeagueBlocks();
for (const block of blocks) {
block.style.display = '';
block.dataset.tmOddsHidden = '0';
}
}
async function loadAllContent() {
const scroller = document.scrollingElement || document.documentElement || document.body;
let stableRounds = 0;
let lastHeight = 0;
while (stableRounds < 4) {
const before = scroller.scrollHeight;
window.scrollTo(0, before);
await sleep(1200);
const after = scroller.scrollHeight;
if (after <= lastHeight || after === before) {
stableRounds++;
} else {
stableRounds = 0;
}
lastHeight = after;
}
window.scrollTo(0, 0);
await sleep(300);
}
async function loadAndHideNoOdds() {
await loadAllContent();
hideNoOddsLeagues();
}
function makeBtn(label, fn) {
const btn = document.createElement('button');
btn.textContent = label;
Object.assign(btn.style, {
padding: '10px 14px',
borderRadius: '10px',
border: '1px solid #999',
background: '#fff',
color: '#111',
fontSize: '14px',
fontWeight: '600',
cursor: 'pointer',
boxShadow: '0 2px 10px rgba(0,0,0,0.20)'
});
btn.addEventListener('click', fn);
return btn;
}
function initPanel() {
if (document.getElementById(PANEL_ID)) return;
const panel = document.createElement('div');
panel.id = PANEL_ID;
Object.assign(panel.style, {
position: 'fixed',
right: '16px',
bottom: '120px',
zIndex: '999999',
display: 'flex',
flexDirection: 'column',
gap: '8px'
});
panel.appendChild(makeBtn('Ocultar sin cuotas', hideNoOddsLeagues));
panel.appendChild(makeBtn('Cargar y ocultar', loadAndHideNoOdds));
panel.appendChild(makeBtn('Mostrar todas', showAllLeagues));
document.body.appendChild(panel);
}
window.addEventListener('load', () => {
setTimeout(initPanel, 1200);
});
setTimeout(initPanel, 2500);
})();
Saludos.