Java 获取页面的可见文本

Java 获取页面的可见文本,java,selenium-webdriver,Java,Selenium Webdriver,在没有HTML标记的情况下,如何使用SeleniumWebDriver获取网页的可见文本部分 我需要与Htmlunit中的函数HtmlPage.asText()等效的东西 仅使用函数WebDriver.getSource获取文本并用jsoup解析它是不够的,因为页面中可能存在我不感兴趣的隐藏元素(通过外部CSS)。通过.tagName(“body”)执行操作(或选择顶部元素的其他选择器),然后执行getText()该元素上的将返回所有可见文本。我不确定您使用的是哪种语言,但在C中,IWebEle

在没有HTML标记的情况下,如何使用SeleniumWebDriver获取网页的可见文本部分

我需要与Htmlunit中的函数HtmlPage.asText()等效的东西


仅使用函数WebDriver.getSource获取文本并用jsoup解析它是不够的,因为页面中可能存在我不感兴趣的隐藏元素(通过外部CSS)。

通过.tagName(“body”)执行
操作(或选择顶部元素的其他选择器),然后执行
getText()该元素上的
将返回所有可见文本。

我不确定您使用的是哪种语言,但在C中,IWebElement对象有一个.text方法。该方法显示元素的开始标记和结束标记之间显示的所有文本

我将使用XPath创建一个IWebElement来获取整个页面。换句话说,您正在抓取body元素并查看其中的文本

string pageText = driver.FindElement(By.XPath("//html/body/")).Text;
如果上述代码不适用于selenium,请使用以下代码:

string yourtext= driver.findElement(By.tagName("body")).getText();
我可以帮你做C#Selenium

通过使用此选项,您可以选择该特定页面上的所有文本,并将其保存到首选位置的文本文件中

请确保您正在使用以下内容:

using System.IO;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
到达特定页面后,请尝试使用此代码

IWebElement body = driver.FindElement(By.TagName("body"));
var result = driver.FindElement(By.TagName("body")).Text;

// Folder location
var dir = @"C:Textfile" + DateTime.Now.ToShortDateString();

// If the folder doesn't exist, create it
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);

// Creates a file copiedtext.txt with all the contents on the page.
File.AppendAllText(Path.Combine(dir, "Copiedtext.txt"), result);

如果你使用firefox,你可以截图。如果你真的需要文字,你确定你需要所有可见的东西吗?通常,当我不得不刮东西时,我只关心页面上的几个元素。再看一看我用命令驱动程序.findElement(By.tagName(“body”)).getText()完美地解决了这个问题。这看起来与上面的C代码相当。关键是抓取body而不是html标记以提高效率。我倾向于使用XPath,因为在Chrome中获取XPath非常容易,但是您可以使用By.cssSelector(“body”)或By.tagName(“body”)作为您使用的标记名。它们都选择相同的元素。“//html/body/”-此xpath无效,因为末尾有额外的“/”。正确的代码是:string pageText=driver.FindElement(By.XPath(“//html/body”)).Text;什么样的对象是“由”?@macdonjo这是Selenium分离选择器的方式
driver.findElement(By.selector或type(“selector”))
噢,我想出来了。我是Python,这就是Java语法。谢谢在python中,getText()方法不存在。相反,我们应该使用element.textMan,人是卑鄙的。为什么会被否决?因为回答者添加了一个lil的额外代码来将捕获的内容保存到文本文件中?它的代码与上面回答的代码完全相同。