我目前正在使用带有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')
到目前为止,按照预期的方式运行到相关部分,但就像我之前提到的那样,我需要该变量的值。完成后,这个脚本将无法运行。
提前致谢。
答案 0 :(得分:2)
我可以想到两种方法。
如果您知道要执行的JavaScript函数的名称,可以执行以下操作:
num = driver.execute_script('return onEditNumber()')
如果你不知道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'
中