You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

鼠标悬停代码失效,如何修复1xBet开盘赔率抓取问题

问题:Oddsportal网站1xBet开盘赔率抓取脚本报错修复

我想抓取Oddsportal上这场赛事的1xBet开盘赔率,编写的JavaScript代码无法正常运行,控制台提示undefined错误,希望实现鼠标悬停显示开盘赔率的效果。

赛事链接:https://www.oddsportal.com/football/chile/segunda-division/real-san-joaquin-linares-unido-tOuhZVip/#ht-ft;2;27

原错误代码

hda = 1;
bookmaker= '1xBet';
els = document.getElementsByClassName('flex');
for (var i = els.length - 1; i >= 0; i--) {
    if(els[i].innerText.startsWith(bookmaker) && els[i].innerText.endsWith(`%`)) {
        el = els[i].children[hda].children[0];
        event = new Event('mouseover');
        el.dispatchEvent(event);
        break;          
    }
}

问题分析

  1. getElementsByClassName('flex')选取范围过广,包含大量无关元素,导致后续children[hda]可能不存在,触发undefined错误
  2. 直接用innerText.startsWith(bookmaker)容易因文本格式(空格、换行)匹配失败
  3. 原生Event('mouseover')无法触发网站绑定的自定义悬停事件,模拟效果无效

修复后的代码

const bookmaker = '1xBet';
// 精准定位博彩商所在的行元素
const bookmakerRows = document.querySelectorAll('.table-main__row');

for (const row of bookmakerRows) {
    const bookmakerNameEl = row.querySelector('.table-main__name');
    if (!bookmakerNameEl || bookmakerNameEl.textContent.trim() !== bookmaker) continue;
    
    // 找到HT/FT对应的赔率单元格(索引根据页面结构调整,对应原hda=1的位置)
    const oddsCell = row.querySelectorAll('.table-main__odds')[1];
    if (!oddsCell) continue;
    
    // 创建标准MouseEvent模拟真实鼠标悬停
    const hoverEvent = new MouseEvent('mouseover', {
        bubbles: true,
        cancelable: true,
        view: window
    });
    oddsCell.dispatchEvent(hoverEvent);
    
    // 可选:触发悬停后读取弹窗内的开盘赔率数据
    setTimeout(() => {
        const popup = document.querySelector('.popup');
        if (popup) {
            const openingOdds = popup.textContent.trim();
            console.log('1xBet开盘赔率:', openingOdds);
        }
    }, 200);
    break;
}

修复说明

  • 使用querySelectorAll('.table-main__row')缩小元素范围,只定位博彩商数据行
  • 通过table-main__name类精准获取博彩商名称,用trim()处理文本空格,确保匹配准确
  • 用querySelectorAll('.table-main__odds')选取赔率单元格,避免依赖不稳定的children索引
  • 替换为MouseEvent并添加必要参数,模拟真实用户的悬停行为,确保触发网站的自定义事件
  • 增加空值判断逻辑,避免因元素不存在导致的报错
  • 可选添加延迟读取弹窗内容的代码,直接获取开盘赔率数据

内容的提问来源于stack exchange,提问作者user23637136

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:19:54