Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python selenium调用中获取javascript变量_Javascript_Python_Selenium - Fatal编程技术网

从python selenium调用中获取javascript变量

从python selenium调用中获取javascript变量,javascript,python,selenium,Javascript,Python,Selenium,我目前正在使用Python和selenium来监视对pbx的更改。我需要的一个值是由javascript调用调用的,实际上并没有写入html,所以如何提取该值有点让人困惑。如果我检查元素,这就是我看到的 <input class="SEditorInputText" id="extension_4" maxlength="15" onkeyup="javascript:onEditNumber(this);" onchange="javascript:onPropertyChange(th

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

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

在网页上,它显示了编号1001,这是我们的亨特集团编号。我假设这个数字是由onkeyup=“javascript:onEditNumber(this)函数生成的,如果是,是否有办法将输出获取到控制台,以便我可以计算分配的数字

这是我到目前为止的selenium代码

#!/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')
!/usr/bin/env python
导入时间
导入系统,urllib2
从selenium导入webdriver
driver=webdriver.Firefox()
登录名\用户名=“”
登录密码=“”
url=“”
脚本=“”
获取驱动程序(url)
用户名=驱动程序。通过名称(“用户名”)查找元素
密码=驱动程序。通过名称(“密码”)查找元素
用户名。发送密钥(登录用户名)
密码。发送密钥(登录密码)
link=驱动程序。通过名称(“登录按钮”)查找元素
link.click()
获取驱动程序(脚本)
aa=driver.find_element_by_xpath(“.//input[contains(@onclick,'compsci main aa.aef')])。单击()
opt1=驱动程序。通过\u id(“扩展名\u 4”)查找\u元素\u
到目前为止,它的工作方式与预期的一样,可以转到讨论的部分,但正如我前面提到的,我需要该变量的值


提前谢谢。

我可以想出两种方法

  • 如果知道要执行的JavaScript函数的名称,可以执行以下操作:

    num=driver.execute_脚本('return onEditNumber()')

  • 如果您不知道JavaScript函数的名称,但知道触发它的元素和事件,则可以执行以下操作:

    func\u name=driver.find\u element\u by\u id('extension\u 4')。get\u attribute('onkeyup')

    func_name=func_name[func_name.index(':')+1://这将从字符串名称中去掉“javascript:”,因此现在“func_name”包含“onEditNumber()”

    num=driver.execute\u script('return'+func\u name)


  • 如果这个JavaScript函数返回一个值,它将存储在'num'中。

    我可以想出两种方法来实现这一点

  • 如果知道要执行的JavaScript函数的名称,可以执行以下操作:

    num=driver.execute_脚本('return onEditNumber()')

  • 如果您不知道JavaScript函数的名称,但知道触发它的元素和事件,则可以执行以下操作:

    func\u name=driver.find\u element\u by\u id('extension\u 4')。get\u attribute('onkeyup')

    func_name=func_name[func_name.index(':')+1://这将从字符串名称中去掉“javascript:”,因此现在“func_name”包含“onEditNumber()”

    num=driver.execute\u script('return'+func\u name)


  • 如果这个JavaScript函数返回一个值,它将存储在'num'

    Hmm中,当我尝试第二个方法时,它会抛出这个错误。---selenium.common.exceptions.WebDriverException:Message:curValue是未定义的Stacktrace:at SelectedCharsOnly()at numericscharsonly()at onEditNumber()at anonymous(第69行>函数:1)在HandleEvaluageEvent()----Hmm,当我尝试第二个方法时,它抛出了这个错误。---selenium.common.exceptions.WebDriverException:Message:curValue是未定义的Stacktrace:at SelectedCharsOnly()at NumericCharsOnly()at onEditNumber()at anonymous(第69行>函数:1)在handleEvaluateEvent()----