【发布时间】:2016-03-20 04:09:32
【问题描述】:
我正在尝试获取网站上单击的元素(任何元素)的文本值,将其从 javascript 返回到 Selenium (Python),并使用该信息将每个单击的元素放入我的日志中。这甚至可以使用 selenium 和 javascript 来实现吗?
此函数可以显示元素,但不会返回任何内容(正常的点击行为)。我知道我可以使用 selenium 从警报弹出窗口中读取文本,但它会使我的浏览器在每次鼠标单击时闪烁。
function getEl()
{
var ev = arguments[0] || window.event,
origEl = ev.target || ev.srcElement;
alert(origEL.text)
}
document.onclick = getEl;
现在尝试访问 javascript console.log 似乎在 Selenium 中不起作用,因此使用 console.log 不是正确的答案。
我可以通过在单击事件上向 localstorage 写入内容然后在 python 中检查 localstorage 中的值来检测某个元素何时被单击。但这不是普遍的。我需要找到并设置我想要观察的每个元素。
function find_element()
{
aTags = document.getElementsByTagName("a");
searchText = "comments";
for (var i = 0; i < aTags.length; i++)
{
if (aTags[i].textContent == searchText)
{
found = aTags[i];
return found;
}
}
}
found=find_element();
function saveEvent()
{
localStorage.setItem("ZAD1.1", "1");
}
if(found)
{
found.addEventListener("click",saveEvent,false);
var x=localStorage.getItem("ZAD1.1");
if (x=="1")
{
count="comments link was clicked";
return count;
}
}
之后你从 python selenium 调用 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。
你能想到任何其他方式将点击的对象发送到 python 吗?
【问题讨论】:
-
为什么要将它发送到 selenium?为什么你不只是将这些信息发送到一些 python http 服务器?
-
因为我想使用 Selenium 脚本作为我在本地运行的考试应用程序的一部分。我当前的脚本启动 Firefox 配置文件,然后检查您是否单击了正确的链接。当你这样做时,它会给你一个点。我知道 Selenium 并非旨在监视用户输入,但我认为这是可以做到的。监控 javascript 在每个访问的网页上开始。我不知道有任何开源工具可以监控用户点击网页的具体内容。在我的情况下,POSTS 和GETS 是不够的。
-
这就是它在行动中的样子。 link
-
我怀疑硒可以这样使用。 Javascript 没有直接与 selenium 驱动程序通信的 api。我能想到的唯一方法是通过 ajax 或 websockets 与您自己的应用程序服务器进行通信。
-
好的。我会考虑一下。现在我可以将值从 javascript 返回到 python,但我必须手动设置检查网站上的每个元素,并且只能是间接的(如您在链接图像和第二个代码片段中所见)。寻找从 onclick 事件返回值的另一种方式给我带来了任何结果。它有点工作,但设置一切很痛苦。感谢您的意见。
标签: javascript python html selenium