首页 > 解决方案 > 如何使用 Selenium 和 Python 单击 svg 标记中的下拉按钮

问题描述

我有一个网站,我想下载一个 excel 文件。 https://www.rivm.nl/media/smap/eenzaamheid.html

我希望能够单击下载按钮,然后单击下载 xls。要单击第一个按钮,我尝试了以下操作:

WebDriverWait(driver, 10).until(EC.visibility_by_element_located(By.XPATH('//path[@d="M 11.6 5 L 11.6 17 M 7.4 12.6 L 11.6 17 L 15.799999999999999 12.6 M 3 19 L 3 21 L 21 21 L 21 19"]'))).click()

WebDriverWait(driver, 10).until(EC.visibility_by_element_located(By.XPATH('//path[@stroke-width="1.8"]'))).click()

WebDriverWait(driver, 10).until(EC.visibility_of_element_located(By.XPATH('//g[@aria-label="View export menu"]'))).click()

WebDriverWait(driver, 10).until(EC.visibility_of_element_located(By.XPATH('//g[@aria-label="Chart export menu"]'))).click()

对于最后两个我得到“'str' object is not callable”错误,前两个选项根本不起作用。

我似乎无法点击按钮。我真的找不到按钮的“id”或唯一的类/名称(打印按钮具有相同的类值),这会使这变得容易得多。

我想我也无法单击“XLS 下载”,因为我在这里也找不到 ID。

那么,我将如何单击第一个按钮,然后单击“XLS 下载”?

标签: pythonseleniumsvgxpathcss-selectors

解决方案


所需的元素是一个元素,因此单击该元素而不是visibility_of_element_located()您必须诱导WebDriverWait并且element_to_be_clickable()您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    driver.get("https://www.rivm.nl/media/smap/eenzaamheid.html")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.highcharts-container svg g[aria-label='View export menu'] rect"))).click()
    
  • 使用XPATH

    driver.get("https://www.rivm.nl/media/smap/eenzaamheid.html")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='highcharts-container ']//*[name()='svg']//*[name()='g' and @aria-label='View export menu']//*[name()='rect']"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

svg_css_click


参考

您可以在以下位置找到一些有关与 SVG 元素交互的相关讨论:


推荐阅读