2013-08-20 2 views
27

Как получить видимую часть текста веб-страницы с веб-селенером без тэгов html?получить видимый текст страницы с selenium webdriver

Мне нужно что-то эквивалентное функции HtmlPage.asText() от Htmlunit.

Недостаточно взять текст с помощью функции WebDriver.getSource и проанализировать его с помощью jsoup, потому что на странице могут быть скрытые элементы (по внешнему css), которые меня не интересуют.

Спасибо, Дэвид

+0

Если вы используете firefox, вы можете сделать снимок экрана. Если вам действительно нужен текст, вы уверены, что вам нужно все, что видно? Обычно, когда мне приходится царапать что-то, меня интересует только несколько элементов на странице. Также взгляните на http://stackoverflow.com/questions/2646195/how-to-check-if-an-element-is-visible-with-webdriver –

ответ

29

Ведение By.tagName("body") (или какой-либо другой селектор, чтобы выбрать верхний элемент), то выполнение getText() на этом элементе будет возвращать весь видимый текст.

+0

Что это за объект? – User

+0

@macdonjo Это то, как Selenium отделяет свои селекторы. 'driver.findElement (By.selectorType (« селектор »)) http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/By.html –

+0

О, я понял это. Я Python, и это синтаксис Java. Благодаря! – User

5

Я не уверен, какой язык вы используете, но на C#, объект IWebElement имеет метод .Text, который вы можете вызвать. Этот метод отображает весь текст, отображаемый между открытием и закрытием элемента. Я бы создал IWebElement, используя XPath, чтобы захватить всю страницу. Другими словами, вы захватываете тег элемента body и смотрите на текст в нем.

string pageText = driver.FindElement(By.XPath("//html/body/")).Text; 

это не работает для селена, используйте

String yourtext= driver.findElement(By.tagName("body")).getText() ; 
+0

Я решил его с помощью команды driver.findElement (By.tagName ("body")). GetText() –

+0

отлично. Это выглядит как эквивалент java для кода C# выше. Ключ должен захватить тело, а не тег html для эффективности. Я склонен использовать XPath из-за того, как легко получить xpath в Chrome, но вы можете использовать By.cssSelector («body») или By.tagName («body»), как вы использовали. Все они выбирают один и тот же элемент. –

4

Я могу помочь вам с # селеном. С помощью этого вы можете выбрать весь текст на этой конкретной странице и сохранить его в текстовом файле в предпочтительном месте.

// Удостоверьтесь, что вы используете эти материалы.

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; 

// Папка местоположение

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

// если он не существует, создайте

if (!Directory.Exists(dir)) 
Directory.CreateDirectory(dir); 

// Создает файл copiedtext.txt со всеми содержимым на странице ,

File.AppendAllText(Path.Combine(dir, "Copiedtext.txt"), result); 
+2

Человек, люди имеют значение. Почему это было приостановлено? Потому что человек, который ответил, добавил дополнительный код lil для сохранения того, что было захвачено в текстовый файл? Он имеет тот же код, что и те, которые были выше. – IamBatman