如何通过Selenium Webdriver Python选择"Sort By"元素



我试图在Python 2.7中使用Selenium Webdriver自动执行一项任务。任务如下:1. 打开"https://www.flipkart.com"。2. 搜索"笔记本电脑"。3.点击搜索按钮。4. 无论搜索查询的答案是什么,使用排序按钮"按流行度"对它们进行排序。

代码
from selenium import webdriver
url="https://www.flipkart.com"
xpaths={'submitButton' :   "//button[@type='submit']",
    'searchBox' : "//input[@type='text']"}
driver=webdriver.Chrome()
driver.maxmimize_window()
driver.get(url)
#to search for laptops
driver.find_element_by_xpath(xpaths['searchBox']).clear()
driver.find_element_by_xpath(xpaths['searchBox']).send_keys('laptop')
driver.find_element_by_xpath(xpaths['submitButton']).click()
#to sort them by popularity
driver.find_element_by_xpath("////*[@id='container']/div/div[2]/div[2]/div/div[2]/div[2]/div/section/ul/li[2]").click()

最后一条语句抛出错误:

raise exception_class(message, screen, stacktrace)
InvalidSelectorException: Message: invalid selector: Unable to locate an element with the xpath expression ////*[@id='container']/div/div[2]/div[2]/div/div[2]/div[2]/div/section/ul/li[2] because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '////*[@id='container']/div/div[2]/div[2]/div/div[2]/div[2]/div/section/ul/li[2]' is not a valid XPath expression.
  (Session info: chrome=53.0.2785.143)
  (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.3 x86_64)

给定我使用Chrome开发人员工具(ctrl+shift+I)复制了特定元素"Sort By - Popularity"的xpath。

而且,当我尝试在开发人员工具的控制台窗口中搜索该xpath时,它会突出显示相同的元素。

xpath有什么问题?的帮助!

就语法错误而言,将xpath中的////替换为//

driver.find_element_by_xpath("//*@id='container']/div/div[2]/div[2]/div/div[2]/div[2]/div/section/ul/li[2]").click()

这将解决您的语法错误,并将完成所需的工作不过在我看来,更好的XPATH应该是driver.find_element_by_xpath("//li[text()='Popularity']").click()

可以使用以下代码:

from selenium import webdriver
import time
url="https://www.flipkart.com"
xpaths={'submitButton' :   "//button[@type='submit']",
    'searchBox' : "//input[@type='text']"}
driver=webdriver.Chrome()
#   driver.maxmimize_window()
driver.get(url)
#to search for laptops
driver.find_element_by_xpath(xpaths['searchBox']).clear()
driver.find_element_by_xpath(xpaths['searchBox']).send_keys('laptop')
driver.find_element_by_xpath(xpaths['submitButton']).click()
#to sort them by popularity
time.sleep(5)
driver.find_element_by_xpath("//li[text()='Popularity']").click()

你也可以试试这个css选择器:

#container > div > div:nth-child(2) > div:nth-child(2)  > div > div:nth-child(2)  > div:nth-child(2)  > div > section > ul > li:nth-child(2)

对我来说,cssSelector在浏览器兼容性方面也比xpath更好。

最新更新