Python Selenium选择一个下拉选项并点击提交

时间:2014-05-13 07:20:45

标签: python selenium selenium-webdriver

我已经尝试过具体的例子,我发现这些例子与这个问题有关,而且它们似乎不起作用?如果我在这里遗漏了某些HTML,那么有人能指出我正确的方向吗?我基本上只是想选择“低”'下拉选项并点击提交。

<form action="#" method="POST">
        <p>Security Level is currently <em>high</em>.<p>
        <p>You can set the security level to low, medium or high.</p>
        <p>The security level changes the vulnerability level of DVWA.</p>

        <select name="security">
            <option value="low">low</option><option value="medium">medium</option><option value="high" selected="selected">high</option>
        </select>
        <input type="submit" value="Submit" name="seclev_submit">
    </form>

这是我的代码:

find_element_by_xpath("//select[@name='security']/option[@value='low']").click()

我尝试过这些方法尝试让提交按钮起作用:

driver.select_by_value("//select[@id='security']").click()
driver.find_find_element_by_name("submit").click()

任何指针?

更新

这似乎有效,但现在我无法确认原因?我添加了附加信息以转到新页面然后停止工作?

driver.get('http://dvwa/security.php') 
el = driver.find_element_by_name('security') 
for option in el.find_elements_by_tag_name('option'):     
    if option.text == 'low':         
        option.click()  
driver.find_element_by_name('seclev_submit').click()
select = Select(driver.find_element_by_xpath("//select[@name='security']"))
select.select_by_value("low")


#Check for XSS
driver.get('http://dvwa/vulnerabilities/xss_r/')
elem = driver.find_element_by_name("name")
elem.send_keys("<script>alert(document.cookie);</script>")

2 个答案:

答案 0 :(得分:0)

Select是一个用于处理下拉列表的类。请尝试以下方法:

select = Select(driver.find_element_by_xpath("//select[@name='security']"))
select.select_by_value("medium")

或者您也可以按照以下元素的名称创建select对象:

select = Select(driver.find_element_by_name("security"))

有关详细信息,请转到here

答案 1 :(得分:0)

我让这个工作....不是最干净的解决方案,但我发现它有效......

driver.get('http://dvwa/security.php')
driver.implicitly_wait(15) 
el = driver.find_element_by_name('security') 
for option in el.find_elements_by_tag_name('option'):     
  if option.text == 'low':        
    option.click()  
driver.implicitly_wait(15)
select = Select(driver.find_element_by_xpath("//select[@name='security']"))
select.select_by_value("low")
driver.implicitly_wait(15)
driver.find_element_by_name('seclev_submit').click()
driver.implicitly_wait(15)