我目前正在使用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;属性对于我想要的复选框是唯一的。)
那么仍有选择此属性的解决方案吗?
提前致谢!
答案 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)来访问该元素及其所有属性。
这似乎对我有用。
希望这有帮助!