如何在没有HTML标签的情况下使用selenium webdriver获取网页的可见文本部分?
我需要与Htmlunit的HtmlPage.asText()函数等效的东西。
仅使用函数WebDriver.getSource获取文本并使用jsoup解析它是不够的,因为页面中可能存在隐藏元素(通过外部CSS),我对它们不感兴趣。
答案 0 :(得分:35)
执行By.tagName("body")
(或其他选择器以选择顶部元素),然后对该元素执行getText()
将返回所有可见文本。
答案 1 :(得分:11)
我可以用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);
答案 2 :(得分:6)
我不确定你使用的语言是什么,但在C#中,IWebElement对象有一个.Text方法。该方法显示元素的开始和结束标记之间显示的所有文本。
我会使用XPath创建一个IWebElement来抓取整个页面。换句话说,你正在抓住body元素并查看其中的文本。
string pageText = driver.FindElement(By.XPath("//html/body/")).Text;
如果上述代码对selenium不起作用,请使用:
string yourtext= driver.findElement(By.tagName("body")).getText();