Selenium / Python - 通过css选择器选择

时间:2013-09-03 19:52:00

标签: python selenium webdriver

问题:

无法从css选择器中选择特定元素。需要验证注册用户是否可以成功更改密码。我已经尝试了类的不同属性来调用它。尝试使用前两个示例时,结果是方法中出现异常错误。最后一次尝试调用第一个类实例并重置密码字段(失败)。

尝试:

driver.find_element_by_css_selector("value.Update").click()
driver.find_element_by_css_selector("type.submit").click()
driver.find_element_by_css_selector("input.test_button4").click()

目标:

我需要选择共享同一课程的项目。如下所示,该课程是共享的。

form id="changepw_form" name="changepw" action="#" method="post">
<div class="field3">
<div class="field3">
<div class="field3">
<input class="test_button4" type="reset" value="Reset" style"font-size:21px"="">
<input class="test_button4" type="submit" value="Update" style"font-size:21px"="">

2 个答案:

答案 0 :(得分:16)

driver.find_element_by_css_selector(".test_button4[value='Update']").click()

编辑: 因为选择器需要classidtagname,但value.Update本身并不是这些。

.test_button4提供了要匹配的类名,[value='Update']从那里指定要选择的特定匹配项。

答案 1 :(得分:2)

test_button4 = driver.find_elements_by_class_name('test_button4') # notice its "find_elementS" with an S
submit_element = [x for x in test_button4 if x.get_attribute('value') == 'Update'] #this would work if you had unlimited things with class_name == 'test_button4', as long as only ONE of them is value="Update"
if len(submit_element): # using a non-empty list as truthiness
    print ("yay! found updated!")

这是我几乎没有看到任何人记录,解释或使用的东西。

(恶意使用名称,例如因为它最简单)

find_element_by_name()会返回单个项目,如果找不到则会发出异常

find_elements_by_name()返回元素列表。如果没有找到元素,则列表为空

所以,如果你做一个find_elements_by_class_name()并且它返回一个包含X条目的列表,那么剩下的就是缩小你想要的东西就是一些老式的列表理解(就像我在我的用法中所使用的那样)如果你出于某种原因知道你想要哪个元素,那么请回答一些索引。

get_attribute()也被严重利用不足。它使用=之前的内容解析元素html的内部,并返回=之后的内容