从javascript onclick返回值到变量或使用oncli更改全局变量

2024-06-02 07:30:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试获取网站上单击的元素(任何元素)的文本值,将其从javascript返回到Selenium(Python),并使用该信息将每个单击的元素放入日志中。使用selenium和javascript甚至可以实现这一点吗?在

此函数可以显示元素,但不会返回任何内容(正常的onclick行为)。我知道我可以使用selenium读取警报弹出窗口中的文本,但它会使我的浏览器在每次鼠标单击时闪烁。在

function getEl()
{
   var ev = arguments[0] || window.event,
   origEl = ev.target || ev.srcElement;
   alert(origEL.text)
}

document.onclick = getEl;

尝试访问javascript控制台.log现在硒似乎不起作用,所以使用控制台.log不是正确的答案。在

我可以通过在click事件上向localstorage写入内容,然后在python中检查localstorage中的值,来检测某个元素何时被单击。但这并不普遍。我需要找到并设置我想观察的每一个元素。在

^{pr2}$

然后从pythonselenium调用javascript

z=driver.execute_script(javascript1)
if z=="comments link was clicked":
        #do something with this information

有没有任何方法可以获取用户在浏览器中单击的对象的信息?我在Firefox中使用Selenium。在

编辑: 通过使用getEL()并在localstorage中写入每个onclick输出,可以获得每个单击的元素。在

localStorage.setItem(origEl.text, origEl.text);

创建本地存储,然后将temp写入数组或字符串

var temp="VISITED LINKS : "
for (var i = 0; i < localStorage.length; i++){
temp +=localStorage.getItem(localStorage.key(i))+" ";}
return temp

然后可以返回整个python列表。在

Reading localStorage content in Selenium (Python2)

你能想出其他方法把点击的对象发送到python吗?在


Tags: text文本信息元素内容varseleniumjavascript
2条回答

最后我可能会使用窗口.名称全局变量。与LocalStorage不同,它在页面更改之间存储有关单击的url的信息。LocalStorage无法在页面更改时保存任何数据。在

https://stackoverflow.com/a/1981681/5678519

如果我没弄错,你只是想在点击页面上的任何元素时得到通知,这样你就可以对这些信息做些什么了?在

您需要一个全局事件处理程序。在

在纯香草JavaScript中,如下所示:

document.body.onclick = function(e) {
    console.log(e);           // `e` is the click event
    console.log(e.target);    // `e.target` is the element that was clicked
    // do something with this information
}

当你想“利用这些信息做点什么”时,你有很多选择,就像你已经解决了的那样。在这里,您可以做的最好的事情是向您控制的HTTP服务器发送AJAX请求,然后接收服务器端脚本可以将详细信息记录到文件中(或者您对它做的任何操作)。在

您的代码表明,当单击某个内容时,您希望将其保存到localStorage—我建议您保存stringified base64编码的JSON,其中包含每个click事件的目标元素。您可以使用以下代码来执行此操作:

^{pr2}$

相关问题 更多 >