Selenium Python - 查找包含两个特定元素的div

时间:2016-08-29 16:16:30

标签: python css selenium selection

我正在使用selenium构建一个python脚本,并遇到了一个非常令人困惑的问题。

网站使用名称(不是唯一的)和颜色列出产品,颜色也不是唯一的。颜色和名称元素具有相同的父元素。

我的脚本获取用户输入他希望脚本为他购买的产品以及颜色。

问题: 我不能为我的生活找出如何使用两个变量productName和productColor选择合适的产品。

DOM:

<div class="inner-article">
  <h1>
    <a class="product-name">Silk Shirt</a>
  </h1>
  <p>
    <a class="product-color">Black</a>
  </p>
</div>

到目前为止我尝试了什么: 显然,在页面上选择名为Silk Shirt的第一个产品非常简单。我考虑选择第​​一个产品,然后选择父产品,选择父元素,然后选择父母第二个孩子,检查它是否为黑色,然后继续,但CSS没有父选择器。

我将如何做到这一点?

2 个答案:

答案 0 :(得分:1)

创建一个选择每个div class="inner-article"元素的主循环。

在循环中,查找具有h1子元素和a class=product-name孙元素的元素,文本为“Silk Shirt”,p子元素和{{ 1}}孙子元素,文字为“黑色”。

答案 1 :(得分:0)

也许尝试使用xpath进行搜索。下面的xpath将返回包含所需产品和颜色的div元素。

driver.find_element_by_xpath('//div[@class="inner-article"][.//a[@class="product-name"][.="Silk Shirt"]][.//a[@class="product-color"][.="Black"]]')

使其可重复使用:

def select_product(name, color):
    return driver.find_element_by_xpath('//div[@class="inner-article"][.//a[@class="product-name"][.="{product_name}"]][.//a[@class="product-color"][.="{product_color}"]]'.format(product_name=name, product_color=color))