如何使用 selenium webdriver 单击此按钮?

How to click this button using selenium webdriver?

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

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

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>

EC 和

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

图表 和相关元素位于 <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
      
  • 浏览器快照:

Here you can find a relevant discussion on

table 在 iframe 中,所以只需切换到它!

frame = driver.find_element_by_css_selector('#chartholder > iframe')
driver.switch_to.frame(frame)

您可以像这样将 WebDriverWaitEC 一起使用:

frame = driver.find_element_by_css_selector('#chartholder > iframe')
wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(frame))

在尝试查找按钮之前,您要查找的按钮属于 iframe so you will have to switch

iframe 和按钮都可以使用 XPath contains() function

定位
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src,'edgar-chartiq')]"))

进入 iframe 后,您应该能够找到并点击按钮:

driver.find_element_by_xpath("//*[contains(text(),'Data Table')]").click()