无法在selenium Webdriver python中通过XPath选择元素

时间:2017-11-27 16:31:28

标签: python selenium xpath selenium-webdriver

我正在尝试在selenium webdriver python中运行脚本。我试图点击搜索字段的位置,但它始终显示“使用给定的搜索参数无法在页面上找到元素。”

这是脚本:

 from selenium import webdriver
    from selenium.webdriver.common.by import By
    class Exercise:
        def safari(self):
            class Exercise:
def safari(self):
    driver = webdriver.Safari()
    driver.maximize_window()
    url= "https://www.airbnb.com"
    driver.implicitly_wait(15)
    Title = driver.title
    driver.get(url)
    CurrentURL = driver.current_url
    print("Current URL is "+CurrentURL)
    SearchButton =driver.find_element(By.XPATH, "//*[@id='GeocompleteController-via-SearchBarV2-SearchBarV2']")
    SearchButton.click()

note= Exercise()
note.safari()

请告诉我,我错在哪里?

1 个答案:

答案 0 :(得分:1)

似乎有两种匹配的情况:

enter image description here

与搜索栏匹配的那个实际上是第二个。因此,您可以按如下方式编辑XPath:

SearchButton = driver.find_element(By.XPATH, "(//*[@id='GeocompleteController-via-SearchBarV2-SearchBarV2'])[2]")

或者简单地说:

SearchButton = driver.find_element_by_xpath("(//*[@id='GeocompleteController-via-SearchBarV2-SearchBarV2'])[2]")

您可以将自己的XPath粘贴到Chrome的Inspector工具中(如上所示),方法是在Google Chrome中加载同一个网站并点击F12(或者只需点击右键并点击" Inspect")。这为您提供了匹配元素。如果您滚动到 2 of 2 ,则会突出显示搜索栏。因此,我们想要第二个结果。 XPath索引从 1 开始,与大多数语言(通常索引从0开始)不同,因此要获取第二个索引,将整个原始XPath封装在括号中,然后在其旁边添加[2]