使用变量操纵xpath

时间:2019-02-27 05:36:58

标签: python selenium xpath web-scraping selenium-chromedriver

因此,我有一段代码,用户可以在其中输入一个颜色变量,并将其字符串称为颜色。示例链接-https://www.supremenewyork.com/shop/jackets/k56l3oteu/hjylineo1。因此,接下来我尝试使用

在网站上找到它
driver.find_element_by_xpath("//a[@data-style-name='{}'".format(color.get()))

语法错误,我不确定如何使用用户之前输入的变量正确找到它。还有一个问题,当找到其中一种颜色时,如何选择该颜色作为检出选项,不确定我是否解释正确。感谢您提供任何信息

2 个答案:

答案 0 :(得分:0)

尝试使用以下CSS选择器来标识元素:

'p.style.protect'

看起来它将唯一地标识显示所选颜色的元素。

然后,您的颜色存储在元素的内部HTML中,因此您可以使用类似的方法来获取颜色

chosenColor = 
driver.find_element_by_css_selector('p.style.protect').text()

好的,我现在了解到您想使用xPath根据颜色动态选择元素。我注意到xPath

'//*[@id="details"]/ul/li[4]/a[1]'

找到右上角的元素,

'//*[@id="details"]/ul/li[4]/a[2]'

找到中右元素,依此类推...

因此,如果您可以简单地使用地图将颜色映射到数字,则类似

colorMap = {
    "brown" : 1,
    "cyan" : 2,
    "grey" : 3,
    ...
}

(不确定颜色在我的示例中是否正确匹配,但希望您能理解)

然后

driver.find_element_by_xpath('//*[@id="details"]/ul/li[4]/a[' + 
'colorMap.("<whatever color you are looking to select>")' + ]').click()

应选择具有指定颜色的元素。

有帮助吗?如果您有任何问题,请告诉我。

答案 1 :(得分:0)

您可以在下面使用字符串格式,但是xpath中有错误-结尾缺少]

driver.find_element_by_xpath("//a[@data-style-name='{}']".format(color.get()))
driver.find_element_by_xpath("//a[@data-style-name='{0}']".format(color.get()))
driver.find_element_by_xpath("//a[@data-style-name='%s']" % color.get())