gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:15:16 25 4
gpt4 key购买 nike

我正在尝试获取网站上点击元素(任何元素)的文本值,将其从 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 不是正确的答案。

我可以检测某个元素何时被点击,方法是在点击事件时向本地存储写入内容,然后在 python 中检查本地存储中的值。但这不是普遍的。我需要找到并设置我想要观察的每个元素。

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.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 吗?

最佳答案

如果我没有理解错的话,你只是想在页面上的任何元素被点击时收到通知,以便你可以使用该信息做些什么?

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

在纯 vanilla 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
}

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

您的代码表明,当单击某些内容时,您希望将其保存到 localStorage - 我建议您保存字符串化的 base64 编码 JSON,其中包含每个点击事件的目标元素。下面是一些您可以用来执行此操作的代码:

/**
* Constant. This is the (string) key name of the
* save location in localStorage.
*/
var locationName = "myNamespace_clicks";

/**
* Given an object, will JSON- and base64-encode
* that object so it can be stored in localStorage.
*/
function encodeForStorage(dataObject) {
return btoa(JSON.stringify(dataObject));
}

/**
* Given a string from localStorage, will decode that
* string from JSON and base64 to a JS object.
*/
function decodeStoredObject(dataString) {
return JSON.parse(atob(dataString));
}

/**
* Given an item, will add this item to the data stored
* in localStorage, and then save the new data.
*/
function addItemToStorage(item) {
var rawStoredData = localStorage.getItem(locationName);
var dataObject;

if(rawStoredData) {
dataObject = decodeStoredObject(rawStoredData);
}
else {
dataObject = {
"clicks": []
}
}

dataObject["clicks"].push(item);

localStorage.setItem(locationName, encodeForStorage(dataObject));
}

document.body.onclick = function(e) {
addItemToStorage(e.target);
}

关于javascript - 从javascript onclick返回值到变量或使用onclick更改全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34271091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com