Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何选择属性为“的复选框”;勾选“;其价值为;勾选“;使用硒?_Python_Html_Selenium_Css Selectors_Html Select - Fatal编程技术网

Python 如何选择属性为“的复选框”;勾选“;其价值为;勾选“;使用硒?

Python 如何选择属性为“的复选框”;勾选“;其价值为;勾选“;使用硒?,python,html,selenium,css-selectors,html-select,Python,Html,Selenium,Css Selectors,Html Select,我目前正在用Python中的selenium进行一些web抓取。现在,我想选择一个复选框,该复选框具有值为“checked”的“checked”属性,该HTML的部分是: 仅自己可见 我尝试使用以下代码,但不起作用: driver.find_element_by_css_selector('input[checked = ""checked""]') 错误消息是: selenium.common.exceptions.InvalidSelectorException: Message

我目前正在用Python中的selenium进行一些web抓取。现在,我想选择一个复选框,该复选框具有值为“checked”的“checked”属性,该HTML的部分是:

  • 仅自己可见
  • 我尝试使用以下代码,但不起作用:

    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""]"
    
    我首先想知道是否应该将双引号改为单引号,但这也不起作用。 (我不使用其他属性的原因是它们将返回重复的结果,只有“checked”属性对于我想要的复选框是唯一的。)

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


    提前谢谢

    关于selenium的好处是,您可以保存某些元素的发现并将其存储在变量中,然后执行另一个find_元素请求以进行更深入的挖掘

    这是一种过滤元素并获得某些属性的好方法。 我不知道您正在查看的页面的完整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 element搜索,并使用输入标记获取其子元素,然后将其存储到另一个名为target_element的变量中

    最后,我们现在可以通过调用target\u element.get\u attribute(attributehere)来访问该元素及其所有属性

    这似乎总是对我有用


    希望这有帮助

    HTML无效。替罪羊可能无法应付。解析器可能会首先将其视为
    checked=”“
    ,然后将其视为
    checked”“
    ,这是不好的。因此,解决方案是首先尝试使HTML处于工作状态。如果无法做到这一点,请祈祷刮板已将
    checked
    属性的值解析为
    @MrLister您的意思是
    checked=”“checked”“
    部分无效吗?是的,这是无效部分。如果我将其粘贴到HTML文件中,并在浏览器中查看生成的DOM,它会显示
    @MrLister我得到了它!因此,也许我可以根据解析器看到的情况尝试使用
    input[checked=”“]
    。非常感谢您的回答,只是在我的机器上尝试了一下,如果页面有该复选框,它将返回一个
    u'true'
    。这个方法真的很有用!!只是好奇,为什么值“checked”被两层引号包围??那是个错误吗?是的,不应该是。没有办法认为它是正确的。@李斯特先生,但有趣的是……这是一个真实的网站,复选框工作得很好,这就是为什么我觉得它很奇怪。@lleiou可能是因为所有浏览器都以大致相同的方式处理它:他们首先看到
    checked=“
    ,它设置
    选中的
    属性,然后设置
    选中的“
    ,这将作为错误被丢弃。最终结果是一样的。