2016-03-11 19 views
0

В настоящее время я использую Python с селеном для мониторинга изменений на нашем pbx. Значение, которое мне нужно, вызывается вызовом javascript и на самом деле не записывается в html, поэтому было немного запутанно, как я могу извлечь значение. Если я проверить элемент это то, что я вижуПолучение переменной javascript из вызова selenium python

<input class="SEditorInputText" id="extension_4" maxlength="15" onkeyup="javascript:onEditNumber(this);" onchange="javascript:onPropertyChange(this);" type="text"> 

На веб-странице он отображает номер 1001, который наш номер huntgroup. Я предполагаю, что число генерируется OnKeyUp = "JavaScript:? OnEditNumber (это) функции, если да, то есть ли способ, чтобы получить выход на консоль, чтобы я мог оценить номер, присвоенный

Вот мой селен код до сих пор

#!/usr/bin/env python 

import time 
import sys, urllib2 
from selenium import webdriver 

driver = webdriver.Firefox() 

login_username = '<username>' 
login_password = '<password>' 

url = '<login Url>' 
scripts = '<scripts Url>' 

driver.get(url) 

username = driver.find_element_by_name("username") 
password = driver.find_element_by_name("password") 

username.send_keys(login_username) 
password.send_keys(login_password) 

link = driver.find_element_by_name("loginbutton") 
link.click() 

driver.get(scripts) 

aa = driver.find_element_by_xpath(".//input[contains(@onclick, 'compsci-main-aa.aef')]").click() 

opt1 = driver.find_element_by_id('extension_4') 

Он до сих пор работает, как ожидается, будет раздел о котором идет речь, но, как я уже говорил ранее, мне нужно значение этой переменной. После завершения этого сценария будет работать без головы.

Спасибо заранее.

ответ

1

Я могу придумать два подхода для этого.

  1. Если вы знаете имя функции JavaScript вы хотите выполнить, вы можете сделать что-то вроде:

    num = driver.execute_script('return onEditNumber()')

  2. Если вы не знаете имя функции JavaScript, но вы знаете элемент и событие, которое запускает его, вы можете сделать:

    func_name = driver.find_element_by_id('extension_4').get_attribute('onkeyup')

    func_name = func_name[func_name.index(':')+1:] #this will strip off 'javascript:' from the string name, so now 'func_name' contains 'onEditNumber();'

    num = driver.execute_script('return ' + func_name)

И если эта функция JavaScript возвращает значение, оно будет храниться в 'NUM'

+0

отлично, я буду играть с этим. Спасибо –

+0

Хмм, это бросает эту ошибку, когда я пытаюсь использовать второй метод. ---- selenium.common.exceptions.WebDriverException: Сообщение: curValue не определено Stacktrace: at SelectedCharsOnly (http: //xxxx/Web/Common/JS/functions.js: 541) в NumericCharsOnly (http: // xxxx/Web/Common/JS/functions.js: 570) at onEditNumber (http: //xxxx/Web/Common/JS/functions.js: 766) на анонимном (http: // xxxx/Web/seditor/SEditor.do строка 69> Функция: 1) на handleEvaluateEvent (http: //xxxx/Web/seditor/SEditor.do: 69) ---- –

Смежные вопросы