Как узнать что за объект на сайте под курсором на Python?
Здравствуйте. Хочу сделать скрипт, который бы выдавал информацию, что в данный момент за объект на сайте находится под курсором. Можно ли как-нибудь узнать, что за объект находится под курсором? К примеру сейчас область такой то ссылки, далее перешли на картинку, теперь ведем на форму ввода, заголовк и т.д.? Я понимаю что есть парсеры, граберы, бьютифул суп и прочее, но это не вопрос найти элемент и распарсерить. Хочется за движением понимать, что сейчас под курсором. Это вообще возможно? Хотя бы в каком направлении копать? Может быть это легко реализуемо на JQuery, JavaScript и стоит просто подключить их как-то к моим скриптам?
Заранее спасибо, если хотя бы направление изучение подскажите...
В комментариях есть ответ как сделать "правильно" на js. Но если нет времени разбираться с js, на python в итоге сделал это через PyAutoGUI и взаимодействие с webtools chrome. Коряво, но работает вообще на любой верстке, даже на самом мраке, так как обрабатывает просто то что видит пользователь на экране, не работая с DOM. Но если нет проблем со временем и js, лучше конечно сделать как написано в комментах
Вам нужен JavaScript, чистый или библиотека вроде jQuery.
С его помощью вешаете на каждый элемент в DOM событие onhover, и далее в функции-обработчике делаете то, что хотите, например, шлёте отчёт на сервер, или показываете XPath в окошке. Только не забудьте, что у некоторых элементов может уже быть свой обработчик onhover, его надо не забывать запускать из своего обработчика, чтобы ничего не сломать.
С Python, наверняка, тоже можно каких-нибудь костылей нагородить (с помощью того же Selenium), но это будет кромешный мрак, не советую связываться.
Блокировщики рекламы работают только с URL нежелательного содержимого. Если он попадает под одну из заданных регулярок, то просто не загружается. Это не требует работы с DOM, то есть, похоже, не подходит автору вопроса.
Dark_O: может, конечно, я чего про AdBlock и не знаю, пользуюсь им в режиме поставил-и-забыл, но он не занимается никакой подсветкой, он просто скрывает рекламу. И делает он это просто тем, что не загружает картинки и скрипты, которые содержат рекламу.
Валерий Рябошапко: Я имел ввиду, что там есть такая функция как "Заблокировать рекламу на сайте", которая дает вам выбрать элемент, который вы хотите заблокировать, вот при включении этой функции и подсвечиваются элементы при наведении на них мышкой. Но возможно я вас неправильно понял, тогда прошу извинить меня.
Dark_O: а, про такую функцию не знал. Тогда, возможно, это то, что надо. Правда, AdBlock, как расширение браузера, скорее всего, делает это через вызовы API самого браузера.
JavaScript. Ибо питон серверный язык, а сервер не знает, что происходит в браузере. Тебе нужно использовать именно то что выполняется в реалтайме на стороне пользователя, то есть в браузере.
Ну питон скорее универсальный язык, всякие силениумы, lxml, grab'ы и т.д. умеют хорошо распарсивать сайты, но тут просто несколько иная задача. Скорее всего в библиотеках есть что-то чтобы посмотреть элемент под курсором, но хотелось чего-то универсального и не зависящего от дерева DOM ( часто сайты просто мрак, надоело мучатся ).
Syschel Хотя конечно сразу думал, что нужно подключать что то типа JQuery и JavaScript - но судя по стандартной библиотеке python, там чего только нет.. думаю я просто не в курсе
seosova: Повторю, питон серверный язык, он выполняется на сервере, а не в браузере. Используйте браузерные языки, которые выполняются на КЛИЕНТЕ. Не несите ерунды.
seosova: В таком случае причём здесь питон? Это серверный язык. Вам нужно ковырять DOM JS'ом, и результат отправлять на сервер. А дальше, уже обрабатывать как хотите, хоть питоном, хоть чем-то ещё.
ну может вы и правы, просто остальное на питоне, впринципе через PyAutoGUI и web tools chroma получается сделать карту движения курсора с элементами под ним, но скорее всего на js это будет более нативно, но в js не настолько селен, хотелось бы сделать в рамках одно языка, тем более я думаю это не такая сложная задача.
seosova: Не нужно стараться сделать в рамках одного языка. Грамотный разработчик должен уметь применять оптимальный инструмент в зависимости от задачи.