🏠 Home 

斗鱼钓鱼自动操作脚本

自动检测斗鱼钓鱼活动按钮并进行相应点击操作,实现自动抛竿、收杆,在活动时间段(中午12:00到凌晨00:30每个准点开启半小时)内执行抛竿


ติดตั้งสคริปต์นี้?
สคริปต์ที่แนะนำของผู้เขียน

คุณอาจชื่นชอบ 斗鱼鱼塘商城兑换工具


ติดตั้งสคริปต์นี้
// ==UserScript==
// @name        斗鱼钓鱼自动操作脚本
// @namespace   your_namespace_here
// @match       https://www.douyu.com/pages/fish-act/mine*
// @grant       none
// @version     1.1
// @description 自动检测斗鱼钓鱼活动按钮并进行相应点击操作,实现自动抛竿、收杆,在活动时间段(中午12:00到凌晨00:30每个准点开启半小时)内执行抛竿
// @license MIT
// ==/UserScript==
let fishingHistory = ''; // 将用于保存钓鱼历史记录的变量放在自执行函数外面,处于全局作用域
let startTime = new Date(); // 记录脚本开始运行的时间
function recordFishInfo() {
const r###ltModal = document.querySelector('.CommonModal-modal.is-center.ManualFishR###ltModal');
if (r###ltModal) {
const fishName = r###ltModal.querySelector('.fish-name')?.textContent.trim() || '未知鱼';
const fishScore = r###ltModal.querySelector('.fish-score')?.textContent.trim() || '0';
const fishAwardName = r###ltModal.querySelector('.name.text-over')?.textContent.trim() || '无';
const fishAwardNum = r###ltModal.querySelector('.num')?.textContent.trim() || '0';
let awardsText = '';
awardsText += `${fishAwardName} × ${fishAwardNum}`;
/*
const awardElements = r###ltModal.querySelectorAll('.awards.award');
let awardsText = '';
console.log(awardElements.length);
if (awardElements.length === 0) {
awardsText = '无奖励名称';
} else {
awardElements.forEach((award, index) => {
const awardName = award.querySelector('.name.text-over')?.textContent.trim() || '无奖励名称';
console.log(awardName);
const awardNum = award.querySelector('.num')?.textContent.trim() || '0';
console.log(awardNum);
awardsText += `${awardName} × ${awardNum}`;
if (index < awardElements.length - 1) {
awardsText += ', ';
}
console.log(awardsText);
});
};
*/
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, '0');
const day = now.getDate().toString().padStart(2, '0');
const hour = now.getHours().toString().padStart(2, '0');
const minute = now.getMinutes().toString().padStart(2, '0');
const second = now.getSeconds().toString().padStart(2, '0');
const formattedTime = `${year}-${month}-${day} ${hour}:${minute}:${second}`;
const record = `${formattedTime} : ${fishName} ${fishScore}斤 且 奖励为:${awardsText}\n`;
fishingHistory += record;
console.log(record);
}
}
function printFishingHistory() {
const now = new Date();
const startYear = startTime.getFullYear();
const startMonth = (startTime.getMonth() + 1).toString().padStart(2, '0');
const startDay = startTime.getDate().toString().padStart(2, '0');
const startHour = startTime.getHours().toString().padStart(2, '0');
const startMinute = startTime.getMinutes().toString().padStart(2, '0');
const startSecond = startTime.getSeconds().toString().padStart(2, '0');
const startFormattedTime = `${startYear}-${startMonth}-${startDay} ${startHour}:${startMinute}:${startSecond}`;
const nowYear = now.getFullYear();
const nowMonth = (now.getMonth() + 1).toString().padStart(2, '0');
const nowDay = now.getDate().toString().padStart(2, '0');
const nowHour = now.getHours().toString().padStart(2, '0');
const nowMinute = now.getMinutes().toString().padStart(2, '0');
const nowSecond = now.getSeconds().toString().padStart(2, '0');
const nowFormattedTime = `${nowYear}-${nowMonth}-${nowDay} ${nowHour}:${nowMinute}:${nowSecond}`;
// 统计钓鱼的条数、总重量以及整理奖励信息 ,多个奖励信息暂未支持
const records = fishingHistory.split('\n').filter(Boolean);
let fishCount = 0;
let totalWeight = 0;
let allAwards = [];
records.forEach(record => {
//console.log(record);
const parts = record.split(' : ')[1].split(' 且 ');
const weightStr = parts[0].split('斤')[0];
//console.log('当前鱼的重量字符串:', weightStr);
// 使用正则表达式提取数字部分,假设重量字符串里只有一处数字内容符合格式要求(比如 2、2.5 等)
const weightMatch = weightStr.match(/\d+(?:\.\d+)?/);
const weight = weightMatch? parseFloat(weightMatch[0]) : 0;
//console.log('当前鱼的重量数值:', weight);
totalWeight += weight;
fishCount++;
const awards = parts[1].split(':')[1].split(', ').map(award => award.trim());
allAwards.push(...awards);
});
const uniqueAwards = [...new Set(allAwards)];
console.log(`从 ${startFormattedTime} 到 ${nowFormattedTime}`);
console.log(`钓了 ${fishCount} 条鱼,${totalWeight} 斤,获得如下奖励:`);
//uniqueAwards.forEach(award => console.log(award)); //输出所有奖励
console.log(fishingHistory);
}
(function() {
'use strict';
//    let fishingHistory = ''; // 用于保存钓鱼历史记录的变量,初始化为空字符串
const interval = 3000;
function isActivityTime() {
const now = new Date();
const hour = now.getHours();
const minute = now.getMinutes();
// 判断是否在活动时间范围内(中午12:00到凌晨00:30每个准点开启半小时)
return (hour >= 12 && hour < 24 && minute < 30) || (hour === 0 && minute < 30);
}
function simulateClick(element) {
const clickEvent = new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: true
});
element.dispatchEvent(clickEvent);
}
function checkAndAct() {
console.log(`每隔 ${interval/1000} 秒执行检测功能`);
// 尝试查找并关闭提示弹窗
const r###ltModal = document.querySelector('.CommonModal-modal.is-center.ManualFishR###ltModal');
if (r###ltModal) {
const closeBtn = r###ltModal.querySelector('div.btn');
if (closeBtn) {
simulateClick(closeBtn);
recordFishInfo();
}
}
const starterDiv = document.querySelector('.Starter');
if (starterDiv) {
const majorBtn = starterDiv.querySelector('.majorBtn');
if (majorBtn) {
const status = majorBtn.querySelector('.status');
if (majorBtn.classList.contains('active')) {
const openFishingButton = majorBtn.querySelector('div.info > div.tips > p.tips.minor'); //普通钓鱼
const autoFishingButton = majorBtn.querySelector('div.info > div.tips.major'); //每小时自动钓鱼的形象
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, '0');
const day = now.getDate().toString().padStart(2, '0');
const hour = now.getHours().toString().padStart(2, '0');
const minute = now.getMinutes().toString().padStart(2, '0');
const second = now.getSeconds().toString().padStart(2, '0');
const formattedTime = `${year}-${month}-${day} ${hour}:${minute}:${second}`;
if (autoFishingButton && autoFishingButton.textContent.trim() === '开始钓鱼'){
if (isActivityTime()) {
console.log(`在大赛时间段内,目前时间为:${formattedTime}`);
console.log('点击抛竿 (自动钓鱼)');
printFishingHistory();
simulateClick(autoFishingButton);
}
}
if (openFishingButton && openFishingButton.textContent.trim() === '开启钓鱼') {
if (isActivityTime()) {
console.log(`在大赛时间段内,目前时间为:${formattedTime}`);
console.log('点击抛竿 (普通钓鱼)');
printFishingHistory();
simulateClick(openFishingButton);
}else{
//console.log(`不在大赛时间段内,目前时间为:${formattedTime}`);
}
}
} else if (majorBtn.classList.contains('finish')) {
const finishButton = majorBtn.querySelector('div.info > div.tips > p.tips.major');
if (finishButton && finishButton.textContent.trim() === '收竿') {
console.log('点击收竿');
simulateClick(finishButton);
}
}
}
}
}
// 使用setInterval设置每隔3000毫秒(即3秒,你可以根据实际需求调整时间间隔)执行一次checkAndAct函数
setInterval(checkAndAct, interval);
})();