Selenium:在 Tableau 视图中获取所有可见文本

Selenium: Get all visible text in Tableau view

我正在尝试使用 Selenium 从 Tableau 视图中获取所有可见文本。我将所有可见文本定义为可以使用任何浏览器的搜索功能搜索的任何文本(即 Ctrl+F)。

我已经搜索了许多其他相关问题的答案,但 none 对我的情况有效。我尝试了 here 的最佳答案。它从一开始就对我不起作用,因为我的 browser.page_source 不包含可见文本。这是我的 browser.page_source:

的内容
<!DOCTYPE html><html xmlns:ng="" xmlns:tb=""><head><style type="text/css">@charset "UTF-8";[ng\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=1024, maximum-scale=1.3"><meta name="apple-itunes-app" content="app-id=434633927"><meta name="format-detection" content="telephone=no"><script>var BuildId = '9qu3thidy901n388pewixusor';
var StaticAssetsUrlPrefix = '';</script><link rel="stylesheet" type="text/css" href="vizportal.css?9qu3thidy901n388pewixusor"><script src="/javascripts/api/tableau-2.1.0.min.js?9qu3thidy901n388pewixusor"></script><script src="vizportalMinLibs.js?9qu3thidy901n388pewixusor"></script><script src="vizportal.min.js?9qu3thidy901n388pewixusor"></script></head><body class="tb-body"><div ng-app="VizPortalRun" id="ng-app" tb-window-resize="" class="tb-app ng-scope"><!-- uiView:  --><div ui-view="" class="tb-app-inner ng-scope"></div><span class="ng-isolate-scope"><div class="tb-toaster tb-enable-selection" data-reactid=".0"></div></span><script type="text/ng-template" id="inline_stackedElement.html"><div tb-window-resize tb-left="left" tb-top="top" tb-right="right" tb-bottom="bottom" tb-visible="visible" class="tb-absolute"></div></script><!-- ngRepeat: stackedElement in stackedElements --><span props="stackedComponentsProps" class="ng-isolate-scope"><div data-reactid=".1"></div></span></div></body></html>

也尝试了最佳答案 here。显然,这不起作用,因为 body 中没有文本,正如您在上面的页面源代码中看到的那样。

在这些情况下获取可见文本的正确方法是什么?

正如我一直说的pages_source获取源码但不一样,Inspect Element检查DOM, the source page although is practically the original seed page for the DOM, the DOM可以动态更改并且通常由JS代码更改, 有时非常戏剧化。您还会注意到 Inspect Element 显示了源代码未显示的阴影元素。

要查看差异有多大,请访问 chrome://settings/ 并单击 Inspect element,然后查看 View page source 并进行比较。

所以你需要从 DOM 中获取你需要的东西,这样你就可以遍历所有标签并得到 textContent 这是 JS 片段:

page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent; 

或 selenium/python:

import selenium
from selenium import webdriver
driver = webdriver.Chrome()

driver.get("http://ranprieur.com")
pagetext = driver.execute_script('page =""; var all = document.getElementsByTagName("*"); for (tag of all) page = page + tag.textContent; return page;')