原因
事情是这样的…抖音网页直播进入直播间后 送礼信息、福袋口令、礼物特效 都很影响观看直播效果,然后大佬出手搞定了它
废话不多说了 直接上代码 也有 @Zker(The-rapist) 大佬协助
效果预览图
进入直播间后会自动点击,然后关闭悬浮窗… 快去试试吧.
代码
-
- (function() {
- ‘use strict’;
-
- console.log(‘[抖音直播自动设置] 脚本已加载’);
-
-
- function waitForPageLoad() {
- return new Promise((resolve) => {
- if (document.readyState === ‘complete’) {
- resolve();
- } else {
- window.addEventListener(‘load’, resolve);
- }
- });
- }
-
-
- function waitForElement(selector, timeout = 120000) {
- return new Promise((resolve, reject) => {
- console.log(`[等待元素] 查找: ${selector}`);
-
- const element = document.querySelector(selector);
- if (element) {
- console.log(`[等待元素] 立即找到: ${selector}`);
- resolve(element);
- return;
- }
-
- const observer = new MutationObserver((mutations, obs) => {
- const element = document.querySelector(selector);
- if (element) {
- console.log(`[等待元素] 观察到: ${selector}`);
- obs.disconnect();
- resolve(element);
- }
- });
-
- observer.observe(document.body, {
- childList: true,
- subtree: true
- });
-
- setTimeout(() => {
- observer.disconnect();
- reject(new Error(`等待元素超时: ${selector}`));
- }, timeout);
- });
- }
-
-
- function hoverReactElement(element) {
- console.log(‘[悬浮元素]’, element);
-
-
- const hoverEvents = [
- ‘mouseenter’,
- ‘mouseover’,
- ‘mousemove’
- ];
-
- hoverEvents.forEach(eventType => {
- const event = new MouseEvent(eventType, {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: 0,
- clientY: 0,
- buttons: 0
- });
- element.dispatchEvent(event);
- });
-
-
- const pointerHoverEvents = [‘pointerenter’, ‘pointerover’, ‘pointermove’];
- pointerHoverEvents.forEach(eventType => {
- const event = new PointerEvent(eventType, {
- view: window,
- bubbles: true,
- cancelable: true,
- isPrimary: true,
- clientX: 0,
- clientY: 0,
- buttons: 0
- });
- element.dispatchEvent(event);
- });
- }
-
-
- function unhoverReactElement(element) {
- console.log(‘[移除悬浮]’, element);
-
-
- const leaveEvents = [
- ‘mouseleave’,
- ‘mouseout’
- ];
-
- leaveEvents.forEach(eventType => {
- const event = new MouseEvent(eventType, {
- view: window,
- bubbles: true,
- cancelable: true,
- clientX: 0,
- clientY: 0,
- buttons: 0
- });
- element.dispatchEvent(event);
- });
-
-
- const pointerLeaveEvents = [‘pointerleave’, ‘pointerout’];
- pointerLeaveEvents.forEach(eventType => {
- const event = new PointerEvent(eventType, {
- view: window,
- bubbles: true,
- cancelable: true,
- isPrimary: true,
- clientX: 0,
- clientY: 0,
- buttons: 0
- });
- element.dispatchEvent(event);
- });
- }
-
-
- function clickReactElement(element) {
- console.log(‘[点击元素]’, element);
-
-
- const events = [‘mousedown’, ‘mouseup’, ‘click’];
-
- events.forEach(eventType => {
- const event = new MouseEvent(eventType, {
- view: window,
- bubbles: true,
- cancelable: true,
- buttons: 1
- });
- element.dispatchEvent(event);
- });
-
-
- const pointerEvents = [‘pointerdown’, ‘pointerup’];
- pointerEvents.forEach(eventType => {
- const event = new PointerEvent(eventType, {
- view: window,
- bubbles: true,
- cancelable: true,
- isPrimary: true
- });
- element.dispatchEvent(event);
- });
- }
-
-
- function sleep(ms) {
- return new Promise(resolve => setTimeout(resolve, ms));
- }
-
-
- async function toggleOffSwitches() {
- try {
- console.log(‘[关闭开关] 开始查找送礼信息和福袋口令的开关’);
-
-
- await sleep(10);
-
-
- const allContainers = document.querySelectorAll(‘.R8qN4fs1’);
-
- console.log(`[关闭开关] 找到 ${allContainers.length} 个容器`);
-
-
- for (const container of allContainers) {
- const textContent = container.textContent || ”;
-
-
- if (textContent.includes(‘送礼信息’) || textContent.includes(‘福袋口令’)) {
- console.log(‘[关闭开关] 找到包含送礼信息/福袋口令的容器’);
-
-
- const rows = container.querySelectorAll(‘.tvFMszYY’);
-
- for (const row of rows) {
- const rowText = row.textContent || ”;
-
-
- if (rowText.includes(‘送礼信息’) || rowText.includes(‘福袋口令’)) {
- console.log(`[关闭开关] 处理: ${rowText.includes(‘送礼信息’) ? ‘送礼信息’ : ‘福袋口令’}`);
-
-
- const switchElement = row.querySelector(‘.dNuSIvAp.SpsbqNUm.cA0AmKoK’);
-
- if (switchElement) {
-
-
- const isOn = switchElement.classList.contains(‘cA0AmKoK’);
-
- console.log(`[关闭开关] ${rowText.includes(‘送礼信息’) ? ‘送礼信息’ : ‘福袋口令’} 状态: ${isOn ? ‘开启’ : ‘关闭’}`);
-
-
- if (isOn) {
- console.log(`[关闭开关] 点击关闭 ${rowText.includes(‘送礼信息’) ? ‘送礼信息’ : ‘福袋口令’}`);
- clickReactElement(switchElement);
- await sleep(10);
- }
- } else {
- console.error(‘[关闭开关] 未找到开关元素’);
- }
- }
- }
- }
- }
-
- console.log(‘[关闭开关] 送礼信息和福袋口令处理完成’);
- return true;
- } catch (error) {
- console.error(‘[关闭开关] 操作失败:’, error);
- return false;
- }
- }
-
-
- async function main() {
- try {
- console.log(‘[主流程] 等待页面加载完成…’);
- await waitForPageLoad();
- console.log(‘[主流程] 页面已加载’);
-
-
- await sleep(10);
-
-
- console.log(‘[步骤1] 查找弹幕设置图标…’);
- const danmakuIcon = await waitForElement(‘div[data-e2e=”danmaku-setting-icon”]’);
-
- if (danmakuIcon) {
- console.log(‘[步骤1] 找到弹幕设置图标,准备悬浮’);
- hoverReactElement(danmakuIcon);
- console.log(‘[步骤1] 已悬浮弹幕设置图标’);
- } else {
- console.error(‘[步骤1] 未找到弹幕设置图标’);
- return;
- }
-
-
- await sleep(10);
-
-
- console.log(‘[步骤2] 开始关闭送礼信息和福袋口令…’);
- await toggleOffSwitches();
-
-
- await sleep(10);
-
-
- console.log(‘[步骤3] 查找礼物设置图标…’);
- const giftIcon = await waitForElement(‘div[data-e2e=”gift-setting”]’);
-
- if (giftIcon) {
- console.log(‘[步骤3] 找到礼物设置图标,准备悬浮’);
- hoverReactElement(giftIcon);
- console.log(‘[步骤3] 已悬浮礼物设置图标’);
- } else {
- console.error(‘[步骤3] 未找到礼物设置图标’);
- return;
- }
-
-
- await sleep(10);
-
-
- console.log(‘[步骤4] 开始开启屏蔽礼物特效…’);
-
-
- await sleep(10);
-
-
- const effectSwitch = await waitForElement(‘div[data-e2e=”effect-switch”]’);
-
- if (effectSwitch) {
- console.log(‘[步骤4] 找到屏蔽礼物特效开关’);
-
-
- const switchElement = effectSwitch.querySelector(‘.dNuSIvAp.EkEDO2Hs’);
-
- if (switchElement) {
-
-
- const isOn = switchElement.classList.contains(‘cA0AmKoK’) ||
- switchElement.querySelector(‘.Cri3cNdU.gDrxzyfK’) !== null;
-
- console.log(`[步骤4] 屏蔽礼物特效 状态: ${isOn ? ‘开启’ : ‘关闭’}`);
-
-
- if (!isOn) {
- console.log(‘[步骤4] 点击开启 屏蔽礼物特效’);
- clickReactElement(switchElement);
- await sleep(10);
- } else {
- console.log(‘[步骤4] 屏蔽礼物特效 已经是开启状态,无需操作’);
- }
- } else {
- console.error(‘[步骤4] 未找到屏蔽礼物特效开关元素’);
- }
- } else {
- console.error(‘[步骤4] 未找到屏蔽礼物特效开关容器’);
- }
-
-
- console.log(‘[步骤5] 开始移除悬浮状态…’);
- await sleep(10);
-
-
- if (giftIcon) {
- console.log(‘[步骤5] 移除礼物设置图标悬浮状态’);
- unhoverReactElement(giftIcon);
- }
-
- await sleep(10);
-
-
- if (danmakuIcon) {
- console.log(‘[步骤5] 移除弹幕设置图标悬浮状态’);
- unhoverReactElement(danmakuIcon);
- }
-
- console.log(‘[主流程] ✅ 所有设置已完成’);
-
- } catch (error) {
- console.error(‘[主流程] 执行出错:’, error);
- }
- }
-
-
- console.log(‘[抖音直播自动设置] 准备执行主流程…’);
- main();
- })();
复制代码
结语&添加
也欢迎大佬优化的更好一些 嘿嘿~ 有需要的自取吧添加方式也简单,新建然后复制代码进去 Ctrl+S 保存就好
 |