Как извлечь частичный текст из элемента, разделенного тегом <br> через селен?

Как отделить 70 от 70 (100%), где 70 и (100%) связаны тегом <br> в селене?

Вот структура:

<a href = "/report/campaigns/698/sent" class = ""> 70<br> (100%)</a>

Код, который я использую:

String[] REP=new String[1];
String Repor= driver.findElement(By.xpath("//html[1]/body[1]/section[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[5]/table[1]/tbody[1]/tr[1]/td[6]")).getText();

REP=Repor.split(""); 

System.out.println("REP "+REP[0]);

Результат, который я получаю: 7

Привет! Когда вы задавали свой вопрос, справа от текстовой области было большое оранжевое поле Как форматировать с полезной информацией. Также была панель инструментов, полная средств форматирования. И кнопка [?] для помощи в форматировании. А также область предварительного просмотра, показывающая, как ваше сообщение будет выглядеть после публикации, расположенное между текстовой областью и кнопкой «Отправить вопрос» (так что вам придется прокручивать ее, чтобы найти кнопку, чтобы побудить вас посмотреть на нее). Если вы сделаете свое сообщение ясным и продемонстрируете, что вы потратили на это время, ваши шансы на получение хороших ответов повысятся.

T.J. Crowder 16.03.2019 15:16

На этот раз dhilmathy опередила меня, исправив это для вас. Пожалуйста, используйте инструменты в следующий раз. Спасибо!

T.J. Crowder 16.03.2019 15:17

Мы не сможем вам помочь, не видя структуры HTML/DOM, из которой вы пытаетесь получить эту информацию.

T.J. Crowder 16.03.2019 15:17

Пожалуйста, используйте ссылку «редактировать», а не комментарии, чтобы улучшить вопрос.

T.J. Crowder 16.03.2019 15:31
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
809
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Этот Xpath сумасшедший, но для решения вашей проблемы, я думаю, это может быть так же просто, как добавить пробел между кавычками в вашей функции split(). Так должно быть

REP=Repor.split(“ “)

Редактировать после уточнения: строка Отчет устанавливается с разрывом строки. Таким образом, следующий код должен найти «70» и «(100%)» по отдельности.

String lines[] = Repor.split("\\r?\\n");

тогда lines[0] равно "70", а lines[1] равно "(100%)". Это то, что вы хотели?

Пробовал это уже. Не работает. Он печатает все это.

Ashu 16.03.2019 15:30

Что получится из строки Repor, если вы отлаживаете или добавляете строку печати сразу после нее?

C. Peck 16.03.2019 15:37

Печатает все то же самое. Я использую его в цикле for и получаю значения из столбца таблицы.

Ashu 16.03.2019 15:46

Что, вы имеете в виду включая br или просто «70 %100»?

C. Peck 16.03.2019 15:49

70 (100%) Это результат для обоих случаев. (100%) находится в следующей строке

Ashu 16.03.2019 15:52

Я отредактировал свой вопрос, чтобы устранить разрыв строки. Это работает для вас?

C. Peck 16.03.2019 16:26

да. Получил 70. Но мне нужно сохранить его как int, и я не могу использовать parseint, так как мы использовали строку []. Пожалуйста, предложите.

Ashu 16.03.2019 16:56

Вам нужна только первая строка, 70? Если да, то должно работать следующее: result = int(lines[0])

C. Peck 16.03.2019 17:02

Да, мне нужно только 70. Используется результат = int(lines[0]), но выдаются следующие ошибки: - Синтаксическая ошибка в токене "int", удалите этот токен - Несоответствие типов: невозможно преобразовать из String в int

Ashu 16.03.2019 17:11

Забыли, что мы используем Java. Попробуйте Integer.parseInt(lines[0]);

C. Peck 16.03.2019 17:27

@Ashu У тебя получилось? Если да, то примете ли вы один из моих ответов или ответов DebanjanB, если у вас будет такая возможность?

C. Peck 16.03.2019 19:35

Все работает отлично. Большое спасибо за помощь. Действительно ценю это.

Ashu 16.03.2019 20:38

Нет проблем, рад это слышать. К следующей проблеме!

C. Peck 16.03.2019 20:40

Чтобы извлечь текст 70, вы можете использовать любой из следующих Стратегии поиска:

  • cssселектор:

    WebElement myElement = driver.findElement(By.cssSelector("a[href='/report/campaigns/698/sent']"));
    String myText = ((JavascriptExecutor)driver).executeScript('return arguments[0].firstChild.textContent;', myElement).toString();
    
  • xpath:

    WebElement myElement = driver.findElement(By.xpath("//a[@href='/report/campaigns/698/sent']"));
    String myText = ((JavascriptExecutor)driver).executeScript('return arguments[0].firstChild.textContent;', myElement).toString();
    

Пробовал стратегию локатора xpath, но на выходе получилось 70 (100%). Все в одну строку

Ashu 16.03.2019 16:05

Получил требуемый результат. Используемый метод подстроки после предложенного вами кода. Большое спасибо. :)

Ashu 16.03.2019 16:08

@Ashu Не уверен, где именно вы застряли, но если вы использовали мой код, он вам точно не понадобится substring.

undetected Selenium 16.03.2019 16:12

Каждый тег считается разделителем существующего текстового узла родительского тега: решение состоит в том, чтобы указать индекс желаемого текстового узла //a/text()[1]

Другие вопросы по теме