Возвращаемое значение из javascript onclick в переменную или изменение глобальной переменной с помощью onclick

Я пытаюсь получить текстовое значение щелкнутого элемента (любого элемента) на веб-сайте, вернуть его из javascript в Selenium (Python) и использовать эту информацию для размещения каждого щелкнутого элемента в моем журнале. Можно ли даже добиться достижения селена и javascript?

Эта функция может отображать элемент, но ничего не вернет (нормальное поведение onclick). Я знаю, что я могу читать текст из всплывающих окон, используя 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 – неправильный ответ.

Я могу обнаружить, когда был щелкнут определенный элемент, написав что-то в localstorage в событии click, а затем проверив значение в localstorage в 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; } } 

После этого вы вызываете javascript из python selenium

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

Есть ли способ получить информацию об объектах, щелкнутых пользователем в браузере? Я использую Selenium с Firefox.

EDIT: вы можете получить каждый элемент с щелчком, используя getEL () и записывая каждый вывод onclick в localstorage.

 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.

Чтение содержимого локальной хранилища в Selenium (Python2)

Можете ли вы придумать какой-либо другой способ отправки кликов объектов на python?

2 Solutions collect form web for “Возвращаемое значение из javascript onclick в переменную или изменение глобальной переменной с помощью onclick”

Если я правильно понимаю это, вы просто пытаетесь получить уведомление, когда щелкнут любой элемент на странице, чтобы вы могли что-то сделать с этой информацией?

Вам нужен глобальный обработчик событий.

В чистом ванильном 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 – я бы рекомендовал вам сохранить стробированный JSON с кодировкой base64, содержащий целевой элемент каждого события click. Вот какой код вы можете использовать для этого:

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

В конце я, вероятно, буду использовать глобальную переменную window.name . В отличие от LocalStorage, он сохраняет информацию о кликах по URL-адресам. LocalStorage не может сохранять данные на смене страницы.

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

  • Как посмотреть сеанс xvfb, находящийся внутри докера на удаленном сервере, из моего локального браузера?
  • Как найти все элементы, содержащие слово «загрузить», используя Selenium x-path?
  • Найти следующий элемент родственного в Python Selenium?
  • Проблема Selenium и Geckodriver с созданием webdriver в Python
  • selenium webdriver занимает слишком много времени, чтобы загрузить страницу
  • Selenium 3.0.1 с IE11, не находящими элементов в Windows 10 (отлично работает в Windows 7 с IE11)
  • Как использовать acceptSslCerts с помощью RemoteWebdriver?
  • Python selenium browser driver.back ()
  •  
    Interesting Posts for Van-Lav

    Как я могу проверить версию Python в программе, использующей новые языковые функции?

    Проверить ограничения в cvxpy с фактическими значениями

    Вход в LinkedIn с сеансами запросов python

    Python Freezegun дает разные значения при замораживании времени datetime.datetime.now ()

    Питоны – самый быстрый способ случайности случайной строки

    Могу ли я управлять архитектурой (32 бит против 64 бит) при создании исполняемого файла pyinstaller?

    Как сравнить список списков / наборов в python?

    Как устранить предупреждение об отказе python3 для оператора равенства?

    Doctest для вложенной docstring

    Данные POST в файл CGI с использованием XMLHttpRequest приводят к тому, что BadHeader

    Имитация нажатия клавиши на аппаратном уровне – Windows

    PyMySQL разные обновления в одном запросе?

    Попытка сбросить индексированную строку NaN в dataframe

    Итак, какова история с 4 кавычками?

    Лучшая практика повторного использования кода python

    Python - лучший язык программирования в мире.