Chrome Object Spy

Object Spy for chrome browser

  1. // ==UserScript==
  2. // @name Chrome Object Spy
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description Object Spy for chrome browser
  6. // @author You
  7. // @match *://*/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13. var arrayWithElements = new Array();
  14. document.onclick = clickListener;
  15.  
  16. function clickListener(e) {
  17. if(e.target.getAttribute("id")!='dont show popup')
  18. {
  19. var clickedElement;
  20. var clickedElement1;
  21. var arialabel;
  22. var clickedtagname;
  23. var attrname;
  24. var attrnamelen;
  25. var tagdetails = "";
  26. var itext;
  27. if(e === null)
  28. {
  29. var clickedElement = event.srcElement.getAttribute("id");
  30. clickedtagname = event.srcElement.tagName;
  31. }
  32. else
  33. {
  34. var x = e.target.parentNode.nodeName;
  35. clickedElement = e.target.getAttribute("id");
  36. clickedElement1 = e.target.getAttribute("class");
  37. clickedtagname = e.target.tagName;
  38. var xpth = createXPathFromElement(e.target);
  39. arialabel = e.target.getAttribute("aria-label");
  40. itext = e.target.innerText;
  41. if(clickedtagname !== null)
  42. {
  43. tagdetails = tagdetails+"<title>Chrome Object Spy</title><table border='1|0'><tr><th>Property</th><th>Value</th></tr><tr><td>TagName</td><td>"+clickedtagname+"</td></tr>";
  44. }
  45. if(itext !== null)
  46. {
  47. tagdetails = tagdetails+"<tr><td>innertext</td><td>"+ itext+"</td></tr>";
  48. }
  49. if(xpth !== null)
  50. {
  51. tagdetails = tagdetails+"<tr><td>Xpath</td><td>"+ xpth+"</td></tr>";
  52. }
  53. for(var i = 0;i<e.target.attributes.length;i++)
  54. {
  55. attrnamelen = e.target.attributes[i].name.length;
  56. attrname = e.target.attributes[i].name;
  57. var attr1 = e.target.attributes[i].name;
  58. while(attrnamelen<25)
  59. {
  60. attr1 = attr1+ " ";
  61. attrnamelen = attr1.length;
  62. }
  63. attr1 = attr1;
  64. tagdetails = tagdetails +"<tr><td>"+attr1 +"</td><td>"+ e.target.attributes[i].value+"</td></tr>";
  65. }
  66. var a = document.createElement("a");
  67. var dt = 'data:text/html,'+tagdetails;
  68. a.id = 'dont show popup';
  69. a.addEventListener("click", function(){window.open(dt, 'newwindow', 'width=300, height=250'); return false;});
  70. document.getElementsByTagName('body')[0].appendChild(a);
  71. a.click();
  72. }
  73. }
  74. }
  75. function createXPathFromElement(elm) {
  76. var allNodes = document.getElementsByTagName('*');
  77. for (var segs = []; elm && elm.nodeType == 1; elm = elm.parentNode)
  78. {
  79. if (elm.hasAttribute('aria-labelledby')) {
  80. segs.unshift(".//"+elm.tagName.toLowerCase()+"[@aria-labelledby='" + elm.getAttribute('aria-labelledby') + "']<br>");
  81. break;
  82. }
  83. else if(elm.hasAttribute('aria-label')) {
  84. var uniqueIdCount = 0;
  85. for (var n=0;n < allNodes.length;n++) {
  86. if (allNodes[n].hasAttribute('aria-label') && allNodes[n].id == elm.id) uniqueIdCount++;
  87. if (uniqueIdCount > 1) break;
  88. }
  89. if ( uniqueIdCount == 1) {
  90. segs.unshift(".//"+elm.tagName.toLowerCase()+"[@aria-label='" + elm.getAttribute('aria-label') + "']<br>");
  91. return segs;
  92. } else {
  93. segs.unshift(".//"+elm.tagName.toLowerCase()+"[@aria-label='" + elm.getAttribute('aria-label') + "']<br>");
  94. }
  95. break;
  96. //segs.unshift(elm.localName.toLowerCase() + ".//"+elm.tagName+"[@aria-label='" + elm.getAttribute('aria-label') + "']");
  97. }
  98. else if (elm.hasAttribute('id')) {
  99. var uniqueIdCount = 0;
  100. for (var n=0;n < allNodes.length;n++) {
  101. if (allNodes[n].hasAttribute('id') && allNodes[n].id == elm.id) uniqueIdCount++;
  102. if (uniqueIdCount > 1) break;
  103. }
  104. if ( uniqueIdCount == 1) {
  105. segs.unshift(".//"+elm.tagName.toLowerCase()+"[@id='" + elm.getAttribute('id') + "']<br>");
  106. return segs;
  107. } else {
  108. segs.unshift(".//"+elm.tagName.toLowerCase()+"[@id='" + elm.getAttribute('id') + "']<br>");
  109. }
  110. break;
  111. } else if (elm.hasAttribute('class')) {
  112. segs.unshift(".//"+elm.tagName.toLowerCase()+"[@class='" + elm.getAttribute('class') + "']<br>");
  113. break;
  114. } else {
  115. for (i = 1, sib = elm.previousSibling; sib; sib = sib.previousSibling) {
  116. if (sib.localName == elm.localName) i++; }
  117. segs.unshift(elm.localName.toLowerCase() + '[' + i + ']');
  118. }
  119. }
  120. return segs.length ? '' + segs : null;
  121. }
  122.  
  123. function lookupElementByXPath(path) {
  124. var evaluator = new XPathEvaluator();
  125. var result = evaluator.evaluate(path, document.documentElement, null,XPathResult.FIRST_ORDERED_NODE_TYPE, null);
  126. return result.singleNodeValue;
  127. }
  128. })();