如何选择带有属性的复选框"选中"其值为"已检查"使用Selenium?

时间:2017-03-12 18:15:29

标签: python html selenium css-selectors html-select

我目前正在使用Python中的selenium进行网络抓取。现在我想选中一个复选框,其中包含"已选中"属性值为#34;"已检查"",该HTML的一部分是:

<li class="private">
  <input id="inp-private" name="private" checked=""checked"" type="checkbox">
  <label class="pl" for="inp-private">仅自己可见</label>
</li>
<li>
  <div id="error" class="errnotnull"> </div>
</li>

我尝试使用以下代码,但它不起作用:

driver.find_element_by_css_selector('input[checked = ""checked""]')

错误信息是:

selenium.common.exceptions.InvalidSelectorException: Message: 
Given css selector expression "input[checked = ""checked""]" is invalid: 
InvalidSelectorError: 'input[checked = ""checked""]' is not a valid selector: 
"input[checked = ""checked""]"

我首先想知道是否应该将双引号更改为单引号,但这也不起作用。 (我之所以不使用其他属性,是因为它们会返回重复的结果,只有&#34; checked&#34;属性对于我想要的复选框是唯一的。)

那么仍有选择此属性的解决方案吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

关于selenium的好处是,您可以保存某些元素结果将它们存储在变量中,然后执行另一个find_element请求以实际深入挖掘。

这是过滤元素并获取某些属性的好方法。 我不知道您正在查看的页面的完整HTML代码,但为了便于论证,您可以通过执行以下操作获取您要查找的属性值:

from selenium import webdriver;
browser = webdriver.Firefox();
browser.get(yourpagehere);
container_element = browser.find_element_by_class_name('private');
target_element = container_element.find_element_by_tag_name('input');
grab_attribute = target_element.get_attribute('checked');

通过执行以下操作,我们首先获取包含我们希望为其属性定位的元素的主元素。 该元素的类名为private。

一旦我们将该元素存储在名为container_element的变量中,我们就可以对刚刚保存的元素进行另一个find元素搜索,并使用input标记获取其子元素,并将其存储到另一个名为target_element的变量中。

最后,我们现在可以通过调用target_element.get_attribute(attributehere)来访问该元素及其所有属性。

这似乎对我有用。

希望这有帮助!