如何使用Python以编程方式从网站下载Tableau csv文件?

如何使用Python以编程方式从网站下载Tableau csv文件?,python,selenium,iframe,automation,tableau-api,Python,Selenium,Iframe,Automation,Tableau Api,我正在尝试使用Python以编程方式从以下站点下载数据: 在Tableau视图的右下角有3个按钮:共享、下载和全屏。单击下载后,您将进入另一个弹出窗口。然后我想选择交叉表,然后带你到另一个弹出窗口,在那里我想选择积极性,最后,下载,它提供了一个csv 我基本上已经成功地浏览了一些iFrame,但由于按钮不包括id/link,我对单击的位置有点迷茫 下面是一种方法的一些代码: from selenium import webdriver url = 'https://public.tableau

我正在尝试使用Python以编程方式从以下站点下载数据:

在Tableau视图的右下角有3个按钮:共享、下载和全屏。单击下载后,您将进入另一个弹出窗口。然后我想选择交叉表,然后带你到另一个弹出窗口,在那里我想选择积极性,最后,下载,它提供了一个csv

我基本上已经成功地浏览了一些iFrame,但由于按钮不包括id/link,我对单击的位置有点迷茫

下面是一种方法的一些代码:

from selenium import webdriver

url = 'https://public.tableau.com/profile/melissa.taylor#!/vizhome/WyomingCOVID-19TestingDataDashboard/Dashboard1'

driver = webdriver.Chrome()
driver.get(url)
#elem = driver.switch_to.frame(driver.find_element_by_xpath('//iframe[contains(text(), "googletagmanager"]'))
try:
    time.sleep(4)
    iframe = driver.find_elements_by_tag_name('iframe')[0]
    driver.switch_to.default_content()

    driver.switch_to.frame(iframe)
    driver.find_elements_by_tag_name('iframe')
    #driver.find_element_by_id('download-ToolbarButton').click()

    print(driver.page_source)
finally:
    driver.quit()
下面是显示Tableau页面中3个按钮的HTML

undoredoresetsharedownload全屏
尝试以下代码:

driver.get('https://public.tableau.com/profile/melissa.taylor#!/vizhome/WyomingCOVID-19TestingDataDashboard/Dashboard1')
wait = WebDriverWait(driver, 20)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[title='Data Visualization']")))
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".tab-icon-download"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Crosstab']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='positivity']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Download']"))).click()
以下内容:

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