【问题标题】:Selenium Python - Multiple Classes in an Xpath Statement [duplicate]Selenium Python - Xpath 语句中的多个类 [重复]
【发布时间】:2017-07-03 21:35:07
【问题描述】:

请有人告诉我是否可以在 Xpath 查询中引用 2 个类? 请看下文。运行此脚本时出现脚本错误。我正在通过 Selenium 使用 python 2.7。

list_ppl_link =  driver.find_element_by_xpath('//div[@class="pro-tease"]//div[@class="pro-tease even"]')   

【问题讨论】:

  • 分享HTML代码

标签: python selenium


【解决方案1】:

您应该能够像这样选择具有多个类的元素:

//div[contains(@class, "pro-tease") and contains(@class, "even")]

这将选择具有 both pro-teaseeven 类的 divs,例如

<div class="pro-tease something even">...</div>
<div class="irrelevant pro-tease foo even">...</div>

但是,它不会选择仅具有两个指定类之一的 div。如果你想选择一个具有一个类或另一个类的元素,试试这个:

//div[contains(@class, "pro-tease") or contains(@class, "even")]

现在,如果你有四个 div:

  1. &lt;div class="pro-tease irrelevant"&gt;...&lt;/div&gt;
  2. &lt;div class="even irrelevant"&gt;...&lt;/div&gt;
  3. &lt;div class="not specified"&gt;...&lt;/div&gt;
  4. &lt;div class="pro-tease even"&gt;...&lt;/div&gt;

1、2、4 将被选中,因为它们都包含pro-tease even

此时,您可能注意到contains() 完全按照它所说的做了:检查类名是否包含指定的参数。因此,如果您将两个contains()and 连接起来,您基本上是在说“给我包含这个类的元素 还有这个”,而对于or,它更像是“给我具有或者这个类,或者这个类的元素”。

顺便说一句,您可以通过搜索元素 (Ctrl + F) 在 Chrome 开发人员模式 (Ctrl+Shift+I) 下测试您的查询。如果您的查询在浏览器中不起作用,它可能在其他地方也不起作用。

【讨论】:

  • 嗨,当我使用以下代码时:list_ppl_link = driver.find_elements_by_xpath('//div[contains(@class, "pro-tease") 和 contains(@class, "even" )]') ....它只给了我可用记录的一半,并且只带回了“亲挑逗”类。你不知道为什么它也没有得到“亲逗”课吗?
  • 网站上基本上有包含“pro-tease”类的行和包含“pro-tease even”类的其他行。我想同时拉出所有链接
  • 我已经更新了答案 - 我的理解是您希望 both 类都存在。如果您希望其中一个出现,请使用or 而不是and,如下所示://div[contains(@class, "pro-tease") or contains(@class, "even")]
  • 非常感谢您的帮助
  • 乐于助人!如果它解决了你的问题,如果你能accept it,我将不胜感激。
【解决方案2】:

How to get html elements with multiple css classes

你要找的是//div[contains(@class, 'class1') and contains(@class, 'class2')]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-21
    • 2014-08-07
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    相关资源
    最近更新 更多