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;')
我正在尝试使用 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;')