我正在为一个网站开发机器人,它需要一个颜色和关键字才能找到该项目。我使用selenium从关键字中查找项目,然后选择一个颜色选项(网站上的一些项目,提供多种颜色的项目)。我无法同时查找关键字和颜色,然后从用户的颜色和关键字输入中选择正确的项目颜色版本。我希望它选择该选项。
我想在Python中制作的公式:
If the first Xpath(keyword) is found and the 2nd Xpath(color) is found
Then select on the item that contains those 2 properties.
这是我目前的代码:
Item = driver.find_element_by_xpath('//*[contains(text(), "MLK")]' and contains ("Black")]')
if (item != None):
actions.moveToElement(item).click()
我已经尝试过上面的代码,但它不起作用。
以下是我要合并以查找项目的两段代码:
driver.find_element_by_xpath('//a[contains(text(), "MLK")]')
driver.find_element_by_xpath('//a[contains(text(), "Black")]')
该关键字名为MLK
Black
合并后,我想找到精确元素(称为MLK,颜色版本=黑色)
应点击此组合项目,我只知道使用.click()
如果有更好的方法,请告诉我。
我用来制作机器人的网站:supremenewyork.com
我使用的项目,例如,选择一种颜色(它是带有MLK的运动衫):http://www.supremenewyork.com/shop/all/sweatshirts
答案 0 :(得分:0)
尝试使用union “|”运算符组合两个xpath。
实施例: -
//p[@id='para1'] | //p[@id='para2']
('//a[contains(text(), "MLK")]' | '//a[contains(text(), "Black")]')
答案 1 :(得分:0)
您可以使用完整的XPath根据两个条件选择所需的项目,只需从父节点开始,然后在子节点上应用条件:
BufferedWriter
首先需要选择元素本身,然后你需要从元素中获取属性@href,如下所示:
//div[contains(./h1/a/text(), "MLK") and contains(./p/a/text(), "Black")]/a/@href
答案 2 :(得分:-1)
我花了一秒钟才意识到每件衬衫有3个A
标签......一个用于图像,一个用于衬衫的名称,一个用于颜色。由于最后两个A
标记是您要进行文本搜索的标记,因此您无法在同一A
标记中查找这两个字符串。我已经测试了下面的XPath,它可以工作。
//article[.//a[contains(.,'MLK')]][.//a[.='Black']]//a
ARTICLE
是衬衫的容器。此XPath正在寻找包含ARTICLE
标记的A
标记,其中包含“MLK”标记。然后另一个A
标记包含' Black'然后找到A
标记后代的ARTICLE
标记。你可以点击它们中的任何一个,它们都是相同的链接。
None
。
Item = driver.find_element_by_xpath('//*[contains(text(), "MLK")]' and contains ("Black")]')
if (Item != None):
actions.moveToElement(item).click()
更好的做法是使用.find_elements()
(复数)并检查空列表。如果列表为空,则表示没有与定位器匹配的元素。
把各个部分放在一起:
items = driver.find_elements_by_xpath("//article[.//a[contains(.,'MLK')]][.//a[.='Black']]//a")
if items:
items[0].click()
我假设您将重复调用此代码,因此我建议您将其放入函数中并传递要搜索的两个字符串。我让你从这里拿走它......