【问题标题】:Selenium (Python): How to insert value on a hidden input?Selenium (Python):如何在隐藏的输入上插入值?
【发布时间】:2013-10-05 10:05:12
【问题描述】:

我正在使用 Selenium 的 WebDriver 和 Python 编码。

有一个隐藏的输入字段,我试图在其中插入一个特定的日期值。该字段最初会生成一个日历,用户可以从中选择适当的日期,但这似乎比直接插入适当的日期值更复杂。

页面的源代码如下所示:

<div class="dijitReset dijitInputField">
<input id="form_date_DateTextBox_0" class="dijitReset" type="text" autocomplete="off" dojoattachpoint="textbox,focusNode" tabindex="0" aria-required="true"/>
<input type="hidden" value="2013-11-26" sliceindex="0"/>

value="2013-11-26" 是我尝试注入值的字段(它最初是空的,即:value=""

我了解 WebDriver 无法在隐藏输入中插入值,因为普通用户无法在浏览器中执行此操作,但解决方法是使用 Javascript。不幸的是,这是我不熟悉的语言。有人知道什么会起作用吗?

【问题讨论】:

    标签: javascript python python-2.7 selenium selenium-webdriver


    【解决方案1】:

    您可以使用WebDriver.execute_script。例如:

    from selenium import webdriver
    
    driver = webdriver.Firefox()
    driver.get('http://jsfiddle.net/falsetru/mLGnB/show/')
    elem = driver.find_element_by_css_selector('div.dijitReset>input[type=hidden]')
    driver.execute_script('''
        var elem = arguments[0];
        var value = arguments[1];
        elem.value = value;
    ''', elem, '2013-11-26')
    

    更新

    from selenium import webdriver
    
    driver = webdriver.Firefox()
    driver.get('http://matrix.itasoftware.com/')
    elem = driver.find_element_by_xpath(
        './/input[@id="ita_form_date_DateTextBox_0"]'
        '/following-sibling::input[@type="hidden"]')
    
    value = driver.execute_script('return arguments[0].value;', elem)
    print("Before update, hidden input value = {}".format(value))
    
    driver.execute_script('''
        var elem = arguments[0];
        var value = arguments[1];
        elem.value = value;
    ''', elem, '2013-11-26')
    
    value = driver.execute_script('return arguments[0].value;', elem)
    print("After update, hidden input value = {}".format(value))
    

    【讨论】:

    • 感谢您的回复!我试过了(没有“执行”的错字),但无法让日期出现,即使脚本没有抛出任何错误。我错过了什么吗?为清楚起见,我在原始帖子中添加了我正在尝试开发的网站。
    • @Infection,对不起,我修正了那个错字。我使用test page 对其进行了测试,并且成功了。 (页面的隐藏字段设置为old-value)。
    • @Infection,哦,你用 url 更新了问题。等一会。我将使用该网址进行测试。
    • @Infection,隐藏的字段太多了,没有id为form_date_DateTextBox_0的输入标签。
    • 对不起!我截断了原始代码以使其可读。有问题的实际 ID 是 ita_form_date_DateTextBox_0(通过 Firebug 上的 Firepath 找到)。该网站上的整个表单是由 Javascript 动态生成的,这就是为什么您可能无法仅通过查看源代码找到上述 ID。
    猜你喜欢
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2016-04-30
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多