Jam*_*s_7 10 html javascript python selenium
我正在尝试获取网站上clicked元素(任何元素)的文本值,将其从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;
Run Code Online (Sandbox Code Playgroud)
尝试访问javascript console.log现在似乎在Selenium中不起作用,所以使用console.log不是正确的答案.
我可以通过在click事件上向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;
}
}
Run Code Online (Sandbox Code Playgroud)
之后,你从python selenium调用javascript
z=driver.execute_script(javascript1)
if z=="comments link was clicked":
#do something with this information
Run Code Online (Sandbox Code Playgroud)
有没有办法获取用户在浏览器中点击的对象的信息?我正在使用Selenium和Firefox.
编辑:您可以使用getEL()并在localstorage中写入每个onclick输出来获取每个单击的元素.
localStorage.setItem(origEl.text, origEl.text);
Run Code Online (Sandbox Code Playgroud)
创建本地存储,然后将temp写为数组或字符串
var temp="VISITED LINKS : "
for (var i = 0; i < localStorage.length; i++){
temp +=localStorage.getItem(localStorage.key(i))+" ";}
return temp
Run Code Online (Sandbox Code Playgroud)
然后你可以将整个列表返回给python.
你能想到将点击的对象发送到python的任何其他方法吗?
如果我理解正确的话,您只是想在单击页面上的任何元素时收到通知,以便您可以使用该信息执行某些操作?
您需要一个全局事件处理程序。
在纯原生 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
}
Run Code Online (Sandbox Code Playgroud)
当您想要“利用这些信息做某事”时,您有多种选择,正如您似乎已经解决的那样。您在这里可以做的最好的事情是将 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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1148 次 |
| 最近记录: |