从python selenium调用中获取javascript变量

时间:2016-03-11 18:29:15

标签: javascript python selenium

我目前正在使用带有selenium的Python来监控对pbx的更改。我需要的一个值是通过javascript调用调用的,实际上并没有写入html,因此我对如何提取值有点困惑。如果我检查元素,这就是我所看到的

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

在网页上显示数字1001,这是我们的寻线组号码。我假设这个数字是由 onkeyup =&#34; javascript:onEditNumber(this)函数生成的,如果有的话有办法将输出输出到控制台,以便我可以评估分配的数字?

到目前为止,这是我的硒代码

#!/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 个答案:

答案 0 :(得分:2)

我可以想到两种方法。

  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)

  3. 如果此JavaScript函数返回一个值,它将存储在'num'