16

问题:

无法从 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"="">
4

2 回答 2

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

编辑:因为选择器需要 a class, id, or tagname,但value.Update它本身不是这些。

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

于 2013-09-03T20:15:44.180 回答
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()返回一个元素列表。如果没有找到元素,则列表为空

因此,如果您执行 afind_elements_by_class_name()并且它返回一个包含 X 条目的列表,那么剩下的就是缩小您想要的范围,或者是一些老式的列表理解(就像我在我的答案中使用的那样)或者一些索引,如果你出于某种原因知道您想要哪个元素。

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

于 2013-09-03T20:11:38.330 回答