首页 > 解决方案 > 如何使用 selenium webdriver 单击此按钮?

问题描述

我正在尝试从纳斯达克抓取数据表:https ://www.nasdaq.com/symbol/msft/interactive-chart?timeframe=5d

我所做的是使用 python 和 selenium webdriver 单击表格按钮(在图表顶部,带有一个小表格徽标)然后刮。

submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#dataTableBtn')))
submit.click()

但它不起作用。

此处的按钮 html:

<div id="dataTableBtn" class="btn hideSmallIR stx-collapsible" onclick="dataTableLoader()"><span>Data Table</span></div>

欧共体和通过

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

标签: python-3.xseleniumxpathcss-selectorswebdriverwait

解决方案


图表和相关元素都在一个内,因此<iframe>您必须:

  • 诱导WebDriverWait使所需的帧可用并切换到它
  • 诱导WebDriverWait使所需元素成为可点击的。
  • 您可以使用以下任一定位器策略

    • 使用CSS_SELECTOR

      driver.get("https://www.nasdaq.com/symbol/msft/interactive-chart?timeframe=5d")
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src*='edgar-chartiq']")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.hideSmallIR#dataTableBtn>span"))).click()
      
    • 使用XPATH

      driver.get("https://www.nasdaq.com/symbol/msft/interactive-chart?timeframe=5d")
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[contains(@src, 'edgar-chartiq')]")))
      WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='btn hideSmallIR stx-collapsible' and @id='dataTableBtn']/span[text()='Data Table']"))).click()
      
    • 注意:您必须添加以下导入:

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

纳斯达克数据表

在这里你可以找到关于如何在 iframe 下处理#document的相关讨论


推荐阅读