【问题标题】:How to click a dropdown button within a svg tag using Selenium and Python如何使用 Selenium 和 Python 单击 svg 标记中的下拉按钮
【发布时间】:2021-03-17 22:14:45
【问题描述】:

我有一个网站,我想下载一个 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 下载”?

【问题讨论】:

  • 那个下载按钮是什么?
  • 打印图标旁边的小向下箭头

标签: python selenium svg xpath css-selectors


【解决方案1】:

所需的元素是 元素,因此要单击元素而不是 visibility_of_element_located(),您必须为 element_to_be_clickable() 诱导 WebDriverWait,您可以使用以下任一种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
    
  • 浏览器快照:


参考文献

您可以在interacting with SVG element 中找到一些相关讨论:

【讨论】:

  • 我已经有了所有的导入。我尝试使用 By.XPATH('//g[@aria-label="Chart export menu"]'))).click() 来点击元素。但我仍然收到“不可点击”错误。您提供的姓名或身份证是我可以使用的确切姓名和身份证吗?
  • @Raymondvanzonneveld 查看更新的答案并告诉我状态。
  • 这完全有效!谢谢!然后我将如何点击“XLS Downloaden”?以同样的方式?
  • @Raymondvanzonneveld 很高兴能为您提供帮助。你能对你的新要求提出一个新问题吗? SO 贡献者将很乐意为您提供帮助。
  • 会的!只需要稍等一下,因为我每 90 分钟只能发布一次。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
相关资源
最近更新 更多