从javascript onclick返回值到变量,或者用onclick更改全局变量

前端之家收集整理的这篇文章主要介绍了从javascript onclick返回值到变量,或者用onclick更改全局变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试获取网站上点击的元素(任何元素)的文本值,将其从 javascript返回到Selenium( Python),并使用该信息将每个点击的元素放在我的日志中.是否可以实现使用硒和 JavaScript

功能可以显示元素,但不会返回任何内容(正常的onclick行为).我知道我可以使用硒读取警报弹出窗口中的文本,但这会让浏览器在每次鼠标点击时闪烁.

  1. function getEl()
  2. {
  3. var ev = arguments[0] || window.event,origEl = ev.target || ev.srcElement;
  4. alert(origEL.text)
  5. }
  6.  
  7. document.onclick = getEl;

试图访问javascript console.log现在似乎不起作用,所以使用console.log不是正确的答案.

我可以通过在点击事件上向localstorage写东西,然后在python中检查localstorage中的值来检测某个元素何时被点击.但它不是普遍的.我需要找到并设置我想观察的每一个元素.

  1. function find_element()
  2. {
  3. aTags = document.getElementsByTagName("a");
  4. searchText = "comments";
  5. for (var i = 0; i < aTags.length; i++)
  6. {
  7. if (aTags[i].textContent == searchText)
  8. {
  9. found = aTags[i];
  10. return found;
  11. }
  12. }
  13. }
  14.  
  15. found=find_element();
  16.  
  17. function saveEvent()
  18. {
  19. localStorage.setItem("ZAD1.1","1");
  20. }
  21.  
  22. if(found)
  23. {
  24.  
  25. found.addEventListener("click",saveEvent,false);
  26.  
  27. var x=localStorage.getItem("ZAD1.1");
  28. if (x=="1")
  29. {
  30. count="comments link was clicked";
  31. return count;
  32. }
  33. }

之后,您从python硒调用javascript

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

有没有办法获取用户在浏览器中点击的对象的信息?我在Firefox中使用Selenium.

编辑:
您可以使用getEL()获取每个点击的元素,并在localstorage中写入每个onclick输出.

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

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

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

然后你可以将整个列表返回到python.

你能想到任何其他方式将点击的对象发送到python吗?

解决方法

如果我正确理解这一点,您只是在页面上的任何元素被点击时尝试收到通知,以便您可以使用该信息进行某些操作

你想要一个全局事件处理程序.

在纯香草JavaScript中,就像这样:

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

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

您的代码表示,当点击某些东西时,您希望将其保存到localStorage – 我建议您保存字符串的base64编码的JSON,其中包含每个点击事件的目标元素.这里有一些代码可以用来做到这一点:

  1. /**
  2. * Constant. This is the (string) key name of the
  3. * save location in localStorage.
  4. */
  5. var locationName = "myNamespace_clicks";
  6.  
  7. /**
  8. * Given an object,will JSON- and base64-encode
  9. * that object so it can be stored in localStorage.
  10. */
  11. function encodeForStorage(dataObject) {
  12. return btoa(JSON.stringify(dataObject));
  13. }
  14.  
  15. /**
  16. * Given a string from localStorage,will decode that
  17. * string from JSON and base64 to a JS object.
  18. */
  19. function decodeStoredObject(dataString) {
  20. return JSON.parse(atob(dataString));
  21. }
  22.  
  23. /**
  24. * Given an item,will add this item to the data stored
  25. * in localStorage,and then save the new data.
  26. */
  27. function addItemToStorage(item) {
  28. var rawStoredData = localStorage.getItem(locationName);
  29. var dataObject;
  30.  
  31. if(rawStoredData) {
  32. dataObject = decodeStoredObject(rawStoredData);
  33. }
  34. else {
  35. dataObject = {
  36. "clicks": []
  37. }
  38. }
  39.  
  40. dataObject["clicks"].push(item);
  41.  
  42. localStorage.setItem(locationName,encodeForStorage(dataObject));
  43. }
  44.  
  45. document.body.onclick = function(e) {
  46. addItemToStorage(e.target);
  47. }

猜你在找的JavaScript相关文章