Refactor : browser class & browsing agent can now login
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
function findInputs(element, result = []) {
|
||||
// Find all <input> elements in the current DOM tree
|
||||
const inputs = element.querySelectorAll('input');
|
||||
inputs.forEach(input => {
|
||||
result.push({
|
||||
tagName: input.tagName,
|
||||
text: input.name || '',
|
||||
type: input.type || '',
|
||||
class: input.className || '',
|
||||
xpath: getXPath(input),
|
||||
displayed: isElementDisplayed(input)
|
||||
});
|
||||
});
|
||||
const allElements = element.querySelectorAll('*');
|
||||
allElements.forEach(el => {
|
||||
if (el.shadowRoot) {
|
||||
findInputs(el.shadowRoot, result);
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
// function to get the XPath of an element
|
||||
function getXPath(element) {
|
||||
if (!element) return '';
|
||||
if (element.id !== '') return '//*[@id="' + element.id + '"]';
|
||||
if (element === document.body) return '/html/body';
|
||||
|
||||
let ix = 0;
|
||||
const siblings = element.parentNode ? element.parentNode.childNodes : [];
|
||||
for (let i = 0; i < siblings.length; i++) {
|
||||
const sibling = siblings[i];
|
||||
if (sibling === element) {
|
||||
return getXPath(element.parentNode) + '/' + element.tagName.toLowerCase() + '[' + (ix + 1) + ']';
|
||||
}
|
||||
if (sibling.nodeType === 1 && sibling.tagName === element.tagName) {
|
||||
ix++;
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
return findInputs(document.body);
|
||||
|
||||
function isElementDisplayed(element) {
|
||||
const style = window.getComputedStyle(element);
|
||||
if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
// Block hardware access by removing or disabling APIs
|
||||
Object.defineProperty(navigator, 'serial', { get: () => undefined });
|
||||
Object.defineProperty(navigator, 'hid', { get: () => undefined });
|
||||
Object.defineProperty(navigator, 'bluetooth', { get: () => undefined });
|
||||
// Block media playback
|
||||
HTMLMediaElement.prototype.play = function() {
|
||||
this.pause(); // Immediately pause if play is called
|
||||
return Promise.reject('Blocked by script');
|
||||
};
|
||||
// Block fullscreen requests
|
||||
Element.prototype.requestFullscreen = function() {
|
||||
console.log('Blocked fullscreen request');
|
||||
return Promise.reject('Blocked by script');
|
||||
};
|
||||
// Block pointer lock
|
||||
Element.prototype.requestPointerLock = function() {
|
||||
console.log('Blocked pointer lock');
|
||||
};
|
||||
// Block iframe creation (optional, since browser already blocks these)
|
||||
const originalCreateElement = document.createElement;
|
||||
document.createElement = function(tagName) {
|
||||
if (tagName.toLowerCase() === 'iframe') {
|
||||
console.log('Blocked iframe creation');
|
||||
return null;
|
||||
}
|
||||
return originalCreateElement.apply(this, arguments);
|
||||
};
|
||||
//block fetch
|
||||
window.fetch = function() {
|
||||
console.log('Blocked fetch request');
|
||||
return Promise.reject('Blocked');
|
||||
};
|
||||
// Block annoying dialogs
|
||||
window.alert = function() {};
|
||||
window.confirm = function() { return false; };
|
||||
window.prompt = function() { return null; };
|
||||
Reference in New Issue
Block a user