Selenium + XPath:找不到元素

时间:2018-03-21 09:41:13

标签: javascript python python-3.x selenium selenium-chromedriver

我有一个Selenium + Python + Chromedriver脚本,该脚本应登录网站,然后点击下载CSV文件的下载按钮。

检查下载按钮的详细信息是:

<button id="csv-button" class="block tiny-margin-top" data-args="csv">
      CSV
</button>

和XPath是:

//*[@id="csv-button"]

但它说我运行脚本时找不到XPath元素。请找到以下代码:

click_button = driver.find_element_by_xpath('//*[@id="csv-button"]')
click_button.click()

3 个答案:

答案 0 :(得分:1)

标识 WebElement 的唯一 xpath 如果您看到元素未找到异常,则需要诱导WebDriverWaitexpected_conditions子句设置为element_to_be_clickable,如下所示:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# other code    
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='csv-button']"))).click()

要更精细,您可以使用:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# other code    
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='block tiny-margin-top' and @id='csv-button']"))).click()

答案 1 :(得分:0)

问题似乎是你的xpath不太正确。您使用单引号,其中需要双倍,反之亦然。

尝试:

click_button = driver.find_element_by_xpath("//*[@id='csv-button']")
click_button.click()

你甚至可以尝试:

//button[@id='csv-button']

这将使xpath搜索速度更快,因为它只会查看按钮标记。

答案 2 :(得分:0)

单引号应放在双引号中。请看下面

click_button = driver.find_element_by_xpath("//*[@id='csv-button']")

click_button.click()

在此处查看更改:

('//*[@id="csv-button"]')   ---> ("//*[@id='csv-button']")