Python Selenium 选择下拉选项并提交

1 投票
2 回答
2524 浏览
提问于 2025-04-18 06:22

我试过一些跟这个问题相关的例子,但好像都不管用?有没有人能帮我指点一下,如果我漏掉了什么,这里是我的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

我把这个搞定了……虽然不是最干净的解决方案,但我发现它确实有效……

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)
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"))

想了解更多细节,可以去 这里看看

撰写回答