2015-12-14 14 views
10

Web sitesindeki tıklatılan öğenin (herhangi bir öğenin) metin değerini almayı denerim, javascript'ten Selenium'a (Python) döndürürüm ve bu bilgileri kullanmak için kullan günlüğümdeki her tıklanan öğe. Bu selenyum ve javascript kullanarak elde etmek mümkün mü?javascript onclick öğesinden değişkene dön veya onclick ile global değişkeni değiştir

Bu işlev öğeyi görüntüleyebilir, ancak hiçbir şey döndürmez (normal onclick davranışı). Selenium kullanarak uyarı pop-up'larından metin okuyabileceğimi biliyorum, ancak tarayıcım her fare tıklamasıyla yanıp sönecektir. Şu anda Selenyum çalışmak görünmüyor JavaScript console.log erişmeye çalışıyor

function getEl() 
{ 
    var ev = arguments[0] || window.event, 
    origEl = ev.target || ev.srcElement; 
    alert(origEL.text) 
} 

document.onclick = getEl; 

böylece console.log kullanarak doğru cevap değildir.

Belirli bir öğenin ne zaman tıklandığında tıklama etkinliğinde yer alan öğeye bir şeyler yazarak ve ardından python'da yer alan yerel değerdeki değeri kontrol ederek algılanabilir. Ama bu evrensel değil. Gözlemlemek istediğim her elemanı bulmalı ve ayarlamalıyım.

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; 
    } 
} 

piton selenyum

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

o sen çağırmak javascript sonra tarayıcıda kullanıcı tarafından tıklandığında nesneler hakkında bilgi almak için herhangi bir yolu var mı? Selenyum'u Firefox ile kullanıyorum.

EDIT: Getirilen her öğeyi getEL() kullanarak ve localstorage öğesinde her onclick çıktısını yazarak alabilirsiniz.

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

yerel depolama oluşturun ve sonra

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

Sonra piton için tüm listeyi iade edebilirsiniz dizi veya dize olarak temp yazın.

Reading localStorage content in Selenium (Python2)

Eğer python için tıklanan nesneleri göndermek için başka bir şekilde düşünebiliyor musunuz?

+0

Neden selenyum göndermek istiyor? Neden bu bilgiyi sadece bir python http sunucusuna göndermeyeceksin? –

+0

Çünkü bu Selenium Script'i yerel olarak çalışan sınavımın bir parçası olarak kullanmak istiyorum. Şu anki komut dosyası firefox profilini başlatıyor ve doğru linke tıklayıp tıklamadığınızı kontrol ediyor. Bunu yaptığınızda size bir nokta verir. Selenium'un kullanıcı girişini izlemek için tasarlanmadığını biliyorum, ama bence bu yapılabilir. Javascript'in izlenmesi, ziyaret edilen her web sayfasında başlar. Kullanıcının web sayfasını tam olarak tıklattığını izlemek için açık kaynaklı bir araç bilmiyorum. Benim durumumda POSTS ve GETS yeterli değil. –

+0

Eylemde nasıl göründüğü budur. [link] (http://s7.postimg.org/yox2swzy2/click.jpg) –

cevap

4

Bunu doğru anlıyorsam, sayfadaki herhangi bir öğe tıklandığında bildirim almaya çalışıyorsunuz, böylece bu bilgilerle bir şeyler yapabilirsiniz?

Genel bir olay işleyicisi istiyorsun. Saf vanilya JavaScript'inizde

, o şöyledir: Eğer "bu bilgilerle bir şeyler yapmak" istediğinizde dışarı çalışmış görünüyor olarak

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 
} 

, sen bir dizi seçeneği vardır. Burada yapabileceğiniz en iyi, denetlemekte olduğunuz bir HTTP sunucusuna bir AJAX isteği göndermektir; bunun üzerine, alıcı sunucu tarafı komut dosyası, ayrıntıları (veya onunla ne yaparsanız yapın) günlüğe kaydedebilir.

Kodunuz, bir şey tıklatıldığında, bunu localStorage uygulamasına kaydetmek istediğinizi belirtir - her tıklama olayının hedef öğesini içeren, base64 kodlu temel JSON kaydetmenizi öneririm.

/** 
* 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); 
} 
1

Sonunda muhtemelen window.name küresel değişkeni kullanacağız: Burada bunu için kullanabileceğiniz bazı kod. LocalStorage'ın aksine, sayfa değişiklikleri arasında tıklanan URL'ler hakkında bilgi depolar. LocalStorage, sayfa değişikliğindeki verileri kaydedemez.

https://stackoverflow.com/a/1981681/5678519