【发布时间】:2022-11-28 13:29:11
【问题描述】:
是否有任何软件包或方法可以检测在网络浏览器中单击的内容?我的意思是从网络浏览器获取标签/xpath(被点击的内容)?之后通过硒或类似物找到它?
甚至用鼠标点击的坐标来判断它是什么。
就像 Playwright 中的 codegen 或类似的,就像一种聆听形式。
希望这是有道理的。
【问题讨论】:
标签: python selenium python-webbrowser
是否有任何软件包或方法可以检测在网络浏览器中单击的内容?我的意思是从网络浏览器获取标签/xpath(被点击的内容)?之后通过硒或类似物找到它?
甚至用鼠标点击的坐标来判断它是什么。
就像 Playwright 中的 codegen 或类似的,就像一种聆听形式。
希望这是有道理的。
【问题讨论】:
标签: python selenium python-webbrowser
我们可以使用 driver.execute_script 添加带有 JavaScript 的窗口侦听器来侦听任何点击,然后调用 SO answer 中提供的函数 xpath 来生成元素的 Xpath。作为要点,下面是 window.addEventListener 脚本,它通过显示带有单击元素文本(如果存在)及其 Xpath 的警报来处理任何 click 事件:
window.addEventListener('click', function(event) {alert(event.target.text+'=>'+xpath(event.target));})
以下是启动浏览器、执行脚本并休眠 20 秒以允许在浏览器上进行交互的相关代码:
def launch_url(url):
driver = webdriver.Chrome('./chromedriver')
driver.get(url)
driver.execute_script("function xpath(el) { if (typeof el == 'string') return document.evaluate(el, document, null, 0, null); if (!el || el.nodeType != 1) return ''; if (el.id) return '//*[@id="' + el.id + '"'; var sames = [].filter.call(el.parentNode.children, function (x) { return x.tagName == el.tagName }); return xpath(el.parentNode) + '/' + el.tagName.toLowerCase() + (sames.length > 1 ? '['+([].indexOf.call(sames, el)+1)+']' : '')} window.addEventListener('click', function(event) {alert(xpath(event.target));});")
time.sleep(20)
作为测试,使用launch_url("https://stackoverflow.com/questions") 启动 SO 主要问题页面并单击“”按钮:
【讨论】: