2016-08-29 61 views
0

我正在使用硒构建python脚本,并且遇到了一个相当混乱的问题。硒Python - 查找包含两个特定元素的div

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

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

问题: 我不能为我的生活弄清楚如何使用两个变量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> 

我试过到目前为止: 显然,选择命名的丝绸衬衫在页面上的第一个产品是很容易的。我考虑选择第​​一个产品,然后选择产品父项,选择该元素父项,然后选择父母第二个子项,检查它是否为黑色,然后继续,但CSS没有父级选择器。

我该如何去做这件事?

回答

1

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

在循环中,寻找那些有h1子元素,并以“丝绸衬衫”的文本中a class=product-name孙子元素和p子元素,并与“黑”的文本a class=product-color孙子元素的元素。

+0

谢谢,好主意。脚本尽可能快地运行非常重要。你认为这会使脚本放慢一两秒以上吗? – metadog

+0

不,我不这么认为。 (但是..页面上有多少产品?) –

+0

20到30,所以它有希望不会成为问题。非常感谢您花时间帮助我! – metadog

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)) 
相关问题