如何使用 cssSelector Python 和 Selenium find_elements 具有多个属性

How to find_elements with multiple attributes using cssSelector Python and Selenium

我正在尝试查找 <div id="contents" ...>

中具有 <a href=....> 的所有元素

这里是 HTML 代码:

<div id="contents" class="style-scope">
    <div id="dismissible" class="style-scope">
        <a id="thumbnail" href="http://www.test.com">

这是我的 python 代码:

items = driver.find_elements(By.cssSelector("div[id="contents"] a[id="thumbnail"]"))

它给我错误:

SyntaxError: invalid syntax. Perhaps you forgot a comma?

我需要把逗号放在哪里?

这是一个语法相关的错误。您正在尝试列出包含不同 HTML 的网络元素?

items = driver.find_elements(By.CSS_SELECTOR,"a#thumbnail")

这个错误信息...

SyntaxError: invalid syntax. Perhaps you forgot a comma?

...表示您使用的 包含 SyntaxError.


深入探讨

有两种写法如下:

  • 要么在单引号内提及属性值,即 '...',要么在双引号内提及整个定位器,即 "..."。示例:

    "tag_name[attribute_name='attribute_value']"
    
  • 或者您提到双引号内的属性值,即 "..." 和单引号内的整个定位器,即 '...'。示例:

    'tag_name[attribute_name="attribute_value"]'
    

解决方案

要识别 <div id="contents" ...> 内具有 <a href=....> 的所有元素,您可以使用以下

elements = driver.find_elements(By.CSS_SELECTOR, "div[id='contents'] a[href]")

但是,如果 css_selector:

  • class 属性可以缩写为 .element_class
  • id 属性可以缩写为 #element_id

准确地说,您的定位器策略可以是:

elements = driver.find_elements(By.CSS_SELECTOR, "div#contents a[href]")

变得细化

为了更加规范,您可能还想考虑 <a> 元素的 id 属性,即 thumbnail。因此 实际上是:

elements = driver.find_elements(By.CSS_SELECTOR, "div#contents a#thumbnail[href]")