v0.14.10 - Add debugScrapeGear() diagnostic + HV.gearDebug()
- New debugScrapeGear() function checks DOM structure: - Whether #eqsb exists and its slot count - Whether #equiplist exists - Whether #popup_box exists and its content - Whether equips global is available - Exposed as HV.gearDebug() for console use
This commit is contained in:
parent
a7a304f5d4
commit
992c6acc38
6 changed files with 141 additions and 9 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.14.9
|
// @version 0.14.10
|
||||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||||
// @author GaboGG + Hermes
|
// @author GaboGG + Hermes
|
||||||
// @match *://*.hentaiverse.org/*
|
// @match *://*.hentaiverse.org/*
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
// CONFIG — default settings
|
// CONFIG — default settings
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
const VERSION = '0.14.9';
|
const VERSION = '0.14.10';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
@ -3253,7 +3253,50 @@ function enhanceArmory() {
|
||||||
|
|
||||||
const GEAR_DB_KEY = SP + 'geardb';
|
const GEAR_DB_KEY = SP + 'geardb';
|
||||||
|
|
||||||
// ── Public API ──
|
// Forced scrape from console with diagnostics
|
||||||
|
function debugScrapeGear() {
|
||||||
|
const url = window.location.href || '';
|
||||||
|
console.log(`%c[HV] 🔍 Gear Debug: URL=${url}`, 'color:#f80');
|
||||||
|
|
||||||
|
// Check for #eqsb
|
||||||
|
const eqsb = document.getElementById('eqsb');
|
||||||
|
if (eqsb) {
|
||||||
|
const slots = eqsb.querySelectorAll(':scope > .eqb');
|
||||||
|
console.log(`%c[HV] #eqsb found: ${slots.length} equipment slots`, 'color:#0f0');
|
||||||
|
slots.forEach((s, i) => {
|
||||||
|
const omo = s.getAttribute('onmouseover') || '';
|
||||||
|
const nameEl = s.querySelector(':scope > div:not([class])') || s.querySelector('div');
|
||||||
|
const name = nameEl ? (nameEl.textContent || '').trim() : 'no name';
|
||||||
|
console.log(` [${i}] ${name} | onmouseover: ${omo.substring(0, 80)}`);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.log(`%c[HV] ❌ #eqsb NOT FOUND`, 'color:#f44');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for #equiplist
|
||||||
|
const equiplist = document.getElementById('equiplist');
|
||||||
|
if (equiplist) {
|
||||||
|
const rows = equiplist.querySelectorAll('table tr');
|
||||||
|
console.log(`%c[HV] #equiplist found: ${rows.length} rows`, 'color:#0f0');
|
||||||
|
} else {
|
||||||
|
console.log(`%c[HV] ❌ #equiplist NOT FOUND`, 'color:#f44');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check popup_box
|
||||||
|
const popup = document.getElementById('popup_box');
|
||||||
|
if (popup) {
|
||||||
|
const text = (popup.textContent || '').substring(0, 100);
|
||||||
|
console.log(`%c[HV] #popup_box: "${text}..."`, 'color:#888');
|
||||||
|
} else {
|
||||||
|
console.log(`%c[HV] ❌ #popup_box NOT FOUND`, 'color:#f44');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for equips global
|
||||||
|
console.log(`%c[HV] typeof equips = ${typeof equips}`, 'color:#888');
|
||||||
|
|
||||||
|
return { url, hasEqsb: !!eqsb, hasEquiplist: !!equiplist, hasPopup: !!popup };
|
||||||
|
}
|
||||||
|
|
||||||
function getGearDB() {
|
function getGearDB() {
|
||||||
try { return JSON.parse(localStorage[GEAR_DB_KEY] || '[]'); } catch (e) { return []; }
|
try { return JSON.parse(localStorage[GEAR_DB_KEY] || '[]'); } catch (e) { return []; }
|
||||||
}
|
}
|
||||||
|
|
@ -3907,6 +3950,7 @@ window.HV = {
|
||||||
gear: () => getGearDB(),
|
gear: () => getGearDB(),
|
||||||
gearSummary: () => logGearSummary(),
|
gearSummary: () => logGearSummary(),
|
||||||
scrapeGear: () => autoScrapeGear(),
|
scrapeGear: () => autoScrapeGear(),
|
||||||
|
gearDebug: () => debugScrapeGear(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.14.9
|
// @version 0.14.10
|
||||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||||
// @author GaboGG + Hermes
|
// @author GaboGG + Hermes
|
||||||
// @match *://*.hentaiverse.org/*
|
// @match *://*.hentaiverse.org/*
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
// CONFIG — default settings
|
// CONFIG — default settings
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
const VERSION = '0.14.9';
|
const VERSION = '0.14.10';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
@ -3253,7 +3253,50 @@ function enhanceArmory() {
|
||||||
|
|
||||||
const GEAR_DB_KEY = SP + 'geardb';
|
const GEAR_DB_KEY = SP + 'geardb';
|
||||||
|
|
||||||
// ── Public API ──
|
// Forced scrape from console with diagnostics
|
||||||
|
function debugScrapeGear() {
|
||||||
|
const url = window.location.href || '';
|
||||||
|
console.log(`%c[HV] 🔍 Gear Debug: URL=${url}`, 'color:#f80');
|
||||||
|
|
||||||
|
// Check for #eqsb
|
||||||
|
const eqsb = document.getElementById('eqsb');
|
||||||
|
if (eqsb) {
|
||||||
|
const slots = eqsb.querySelectorAll(':scope > .eqb');
|
||||||
|
console.log(`%c[HV] #eqsb found: ${slots.length} equipment slots`, 'color:#0f0');
|
||||||
|
slots.forEach((s, i) => {
|
||||||
|
const omo = s.getAttribute('onmouseover') || '';
|
||||||
|
const nameEl = s.querySelector(':scope > div:not([class])') || s.querySelector('div');
|
||||||
|
const name = nameEl ? (nameEl.textContent || '').trim() : 'no name';
|
||||||
|
console.log(` [${i}] ${name} | onmouseover: ${omo.substring(0, 80)}`);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.log(`%c[HV] ❌ #eqsb NOT FOUND`, 'color:#f44');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for #equiplist
|
||||||
|
const equiplist = document.getElementById('equiplist');
|
||||||
|
if (equiplist) {
|
||||||
|
const rows = equiplist.querySelectorAll('table tr');
|
||||||
|
console.log(`%c[HV] #equiplist found: ${rows.length} rows`, 'color:#0f0');
|
||||||
|
} else {
|
||||||
|
console.log(`%c[HV] ❌ #equiplist NOT FOUND`, 'color:#f44');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check popup_box
|
||||||
|
const popup = document.getElementById('popup_box');
|
||||||
|
if (popup) {
|
||||||
|
const text = (popup.textContent || '').substring(0, 100);
|
||||||
|
console.log(`%c[HV] #popup_box: "${text}..."`, 'color:#888');
|
||||||
|
} else {
|
||||||
|
console.log(`%c[HV] ❌ #popup_box NOT FOUND`, 'color:#f44');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for equips global
|
||||||
|
console.log(`%c[HV] typeof equips = ${typeof equips}`, 'color:#888');
|
||||||
|
|
||||||
|
return { url, hasEqsb: !!eqsb, hasEquiplist: !!equiplist, hasPopup: !!popup };
|
||||||
|
}
|
||||||
|
|
||||||
function getGearDB() {
|
function getGearDB() {
|
||||||
try { return JSON.parse(localStorage[GEAR_DB_KEY] || '[]'); } catch (e) { return []; }
|
try { return JSON.parse(localStorage[GEAR_DB_KEY] || '[]'); } catch (e) { return []; }
|
||||||
}
|
}
|
||||||
|
|
@ -3907,6 +3950,7 @@ window.HV = {
|
||||||
gear: () => getGearDB(),
|
gear: () => getGearDB(),
|
||||||
gearSummary: () => logGearSummary(),
|
gearSummary: () => logGearSummary(),
|
||||||
scrapeGear: () => autoScrapeGear(),
|
scrapeGear: () => autoScrapeGear(),
|
||||||
|
gearDebug: () => debugScrapeGear(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
// CONFIG — default settings
|
// CONFIG — default settings
|
||||||
// ═══════════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
const VERSION = '0.14.9';
|
const VERSION = '0.14.10';
|
||||||
|
|
||||||
const CFG = {
|
const CFG = {
|
||||||
// — Battle automation
|
// — Battle automation
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,50 @@
|
||||||
|
|
||||||
const GEAR_DB_KEY = SP + 'geardb';
|
const GEAR_DB_KEY = SP + 'geardb';
|
||||||
|
|
||||||
// ── Public API ──
|
// Forced scrape from console with diagnostics
|
||||||
|
function debugScrapeGear() {
|
||||||
|
const url = window.location.href || '';
|
||||||
|
console.log(`%c[HV] 🔍 Gear Debug: URL=${url}`, 'color:#f80');
|
||||||
|
|
||||||
|
// Check for #eqsb
|
||||||
|
const eqsb = document.getElementById('eqsb');
|
||||||
|
if (eqsb) {
|
||||||
|
const slots = eqsb.querySelectorAll(':scope > .eqb');
|
||||||
|
console.log(`%c[HV] #eqsb found: ${slots.length} equipment slots`, 'color:#0f0');
|
||||||
|
slots.forEach((s, i) => {
|
||||||
|
const omo = s.getAttribute('onmouseover') || '';
|
||||||
|
const nameEl = s.querySelector(':scope > div:not([class])') || s.querySelector('div');
|
||||||
|
const name = nameEl ? (nameEl.textContent || '').trim() : 'no name';
|
||||||
|
console.log(` [${i}] ${name} | onmouseover: ${omo.substring(0, 80)}`);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.log(`%c[HV] ❌ #eqsb NOT FOUND`, 'color:#f44');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for #equiplist
|
||||||
|
const equiplist = document.getElementById('equiplist');
|
||||||
|
if (equiplist) {
|
||||||
|
const rows = equiplist.querySelectorAll('table tr');
|
||||||
|
console.log(`%c[HV] #equiplist found: ${rows.length} rows`, 'color:#0f0');
|
||||||
|
} else {
|
||||||
|
console.log(`%c[HV] ❌ #equiplist NOT FOUND`, 'color:#f44');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check popup_box
|
||||||
|
const popup = document.getElementById('popup_box');
|
||||||
|
if (popup) {
|
||||||
|
const text = (popup.textContent || '').substring(0, 100);
|
||||||
|
console.log(`%c[HV] #popup_box: "${text}..."`, 'color:#888');
|
||||||
|
} else {
|
||||||
|
console.log(`%c[HV] ❌ #popup_box NOT FOUND`, 'color:#f44');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for equips global
|
||||||
|
console.log(`%c[HV] typeof equips = ${typeof equips}`, 'color:#888');
|
||||||
|
|
||||||
|
return { url, hasEqsb: !!eqsb, hasEquiplist: !!equiplist, hasPopup: !!popup };
|
||||||
|
}
|
||||||
|
|
||||||
function getGearDB() {
|
function getGearDB() {
|
||||||
try { return JSON.parse(localStorage[GEAR_DB_KEY] || '[]'); } catch (e) { return []; }
|
try { return JSON.parse(localStorage[GEAR_DB_KEY] || '[]'); } catch (e) { return []; }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name HV Unified
|
// @name HV Unified
|
||||||
// @namespace hvunified
|
// @namespace hvunified
|
||||||
// @version 0.14.9
|
// @version 0.14.10
|
||||||
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
// @description HV Unified — battle automation, guidance, and UI enhancements for HentaiVerse
|
||||||
// @author GaboGG + Hermes
|
// @author GaboGG + Hermes
|
||||||
// @match *://*.hentaiverse.org/*
|
// @match *://*.hentaiverse.org/*
|
||||||
|
|
|
||||||
|
|
@ -24,4 +24,5 @@ window.HV = {
|
||||||
gear: () => getGearDB(),
|
gear: () => getGearDB(),
|
||||||
gearSummary: () => logGearSummary(),
|
gearSummary: () => logGearSummary(),
|
||||||
scrapeGear: () => autoScrapeGear(),
|
scrapeGear: () => autoScrapeGear(),
|
||||||
|
gearDebug: () => debugScrapeGear(),
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue