使用Python Selenium抓取Tableau页面数据遇返回None问题求助
解决Tableau页面数据抓取问题
当前代码的核心错误
你代码里的driver.execute_script("return //public.tableau.com/vizql/v_202242301300809/javascripts/ViewerBootstrap.js")完全无效://是JavaScript的单行注释,这行代码相当于return后没有任何有效内容,Selenium会把JS的undefined转为Python的None,所以你始终得到这个结果。
修正:获取渲染后的页面内容
如果只是要获取页面渲染后的内容,可以调整代码,添加等待逻辑确保Tableau加载完成,再抓取页面HTML或目标区域:
import sys from selenium import webdriver import chromedriver_autoinstaller from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By sys.path.append("G:\\Python36\\mypath") chromedriver_autoinstaller.install() # 配置无头模式,避免加载异常 chrome_options = Options() chrome_options.add_argument("--headless=new") chrome_options.add_argument("--window-size=1920,1080") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") driver = webdriver.Chrome(options=chrome_options) driver.get("https://www.route.org.uk/q42022-dashboard") try: # 等待Tableau核心容器加载,超时20秒 WebDriverWait(driver, 20).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".tableauPlaceholder")) ) # 获取整个页面的渲染后HTML full_page_html = driver.page_source print(full_page_html) # 或者只抓取Tableau可视化区域的内容 tableau_area = driver.find_element(By.CSS_SELECTOR, ".tableauPlaceholder") print(tableau_area.get_attribute("outerHTML")) finally: driver.quit()
更高效的方案:直接提取Tableau数据源
如果目标是获取原始结构化数据,Selenium不是最优选择,推荐使用专门的tableau-scraping库,它可以直接解析Tableau的VizQL接口,拿到结构化数据:
- 先安装库:
pip install tableau-scraping
- 提取数据的示例代码:
from tableau_scraping import TableauScraper as TS ts = TS() # 加载目标页面 ts.load("https://www.route.org.uk/q42022-dashboard") # 获取工作簿中的第一个工作表数据 workbook = ts.get_workbook() first_worksheet = workbook.worksheets[0] # 输出结构化的表格数据 print(first_worksheet.data)
这个库会自动处理Tableau的API请求,直接返回可处理的数据集,比用Selenium模拟浏览器更高效稳定。
内容的提问来源于stack exchange,提问作者gdogg371
相关产品推荐
相关产品推荐

