kopia lustrzana https://github.com/dgtlmoon/changedetection.io
BrowserSteps - Also try to find clickable div/spans
rodzic
07765b0d38
commit
2c764e8f84
|
@ -232,7 +232,7 @@ class browsersteps_live_ui(steppable_browser_interface):
|
||||||
self.page.evaluate("var include_filters=''")
|
self.page.evaluate("var include_filters=''")
|
||||||
# Go find the interactive elements
|
# Go find the interactive elements
|
||||||
# @todo in the future, something smarter that can scan for elements with .click/focus etc event handlers?
|
# @todo in the future, something smarter that can scan for elements with .click/focus etc event handlers?
|
||||||
elements = 'a,button,input,select,textarea,i,th,td,p,li,h1,h2,h3,h4'
|
elements = 'a,button,input,select,textarea,i,th,td,p,li,h1,h2,h3,h4,div,span'
|
||||||
xpath_element_js = xpath_element_js.replace('%ELEMENTS%', elements)
|
xpath_element_js = xpath_element_js.replace('%ELEMENTS%', elements)
|
||||||
xpath_data = self.page.evaluate("async () => {" + xpath_element_js + "}")
|
xpath_data = self.page.evaluate("async () => {" + xpath_element_js + "}")
|
||||||
# So the JS will find the smallest one first
|
# So the JS will find the smallest one first
|
||||||
|
|
|
@ -124,6 +124,7 @@ for (var i = 0; i < elements.length; i++) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @todo Possible to ONLY list where it's clickable to save JSON xfer size
|
||||||
size_pos.push({
|
size_pos.push({
|
||||||
xpath: xpath_result,
|
xpath: xpath_result,
|
||||||
width: Math.round(bbox['width']),
|
width: Math.round(bbox['width']),
|
||||||
|
@ -131,7 +132,8 @@ for (var i = 0; i < elements.length; i++) {
|
||||||
left: Math.floor(bbox['left']),
|
left: Math.floor(bbox['left']),
|
||||||
top: Math.floor(bbox['top'])+scroll_y,
|
top: Math.floor(bbox['top'])+scroll_y,
|
||||||
tagName: (elements[i].tagName) ? elements[i].tagName.toLowerCase() : '',
|
tagName: (elements[i].tagName) ? elements[i].tagName.toLowerCase() : '',
|
||||||
tagtype: (elements[i].tagName == 'INPUT' && elements[i].type) ? elements[i].type.toLowerCase() : ''
|
tagtype: (elements[i].tagName == 'INPUT' && elements[i].type) ? elements[i].type.toLowerCase() : '',
|
||||||
|
isClickable: (elements[i].onclick) || window.getComputedStyle(elements[i]).cursor == "pointer"
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -196,9 +196,7 @@ $(document).ready(function () {
|
||||||
$('input[placeholder="Value"]', first_available).addClass('ok').click().focus();
|
$('input[placeholder="Value"]', first_available).addClass('ok').click().focus();
|
||||||
found_something = true;
|
found_something = true;
|
||||||
} else {
|
} else {
|
||||||
// Assume it's just for clicking on
|
if (x['isClickable'] || x['tagName'].startsWith('h')|| x['tagName'] === 'a' || x['tagName'] === 'button' || x['tagtype'] === 'submit'|| x['tagtype'] === 'checkbox'|| x['tagtype'] === 'radio'|| x['tagtype'] === 'li') {
|
||||||
// what are we clicking on?
|
|
||||||
if (x['tagName'].startsWith('h')|| x['tagName'] === 'a' || x['tagName'] === 'button' || x['tagtype'] === 'submit'|| x['tagtype'] === 'checkbox'|| x['tagtype'] === 'radio'|| x['tagtype'] === 'li') {
|
|
||||||
$('select', first_available).val('Click element').change();
|
$('select', first_available).val('Click element').change();
|
||||||
$('input[type=text]', first_available).first().val(x['xpath']);
|
$('input[type=text]', first_available).first().val(x['xpath']);
|
||||||
found_something = true;
|
found_something = true;
|
||||||
|
@ -220,8 +218,6 @@ $(document).ready(function () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue