Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Проблемы с извлечением текста внутри тэгов


(Zemlyaniy Ivan) #1

Специалисты, выручайте плиз. Не знаю как побороть проблему.

Извлекаю текст

    <p class="oDescription m-md-top m-0-bottom">
I am an expert in the field of Web scraping, using Watir, 
<em>Ruby</em>, PHP, Javascript, HTML and VBScript.
</p>

по локатору:

driver.find_element(:xpath => ‘//p[@class=“oDescription m-md-top m-0-bottom”]’).text

Вроде все просто, однако часть извлекаемого текста который находится внутри тэга <em> просто пропадает, теряется (((
Эту беду можно побороть?


(Andrew Zakordonets) #2

Можешь попробовать //p[@class=“oDescription m-md-top m-0-bottom”]’)//text()[normalize-space()] ?


(Zemlyaniy Ivan) #5

Попробовал, в таком решении локатор вообще не заработал. ( Я его покрутил и так и сяк, были рабочие варинты, но проблему не решили. Наверное стоит погуглить про xpath функции?

Вообще этот тэг - <em>, динамический и появляется в зависимости от предыдущего запроса к данной странице. Может можно как-то его проигнорить?


(Zemlyaniy Ivan) #6

К сожалению рокировка кавычек ожидаемого эффекта не принесла ((


(Константин) #7

Попробуйте вот такой xpath:
string(//p[@class=“oDescription m-md-top m-0-bottom”])

Ну и ссылочка почитать про строковые функции XPath


(Maksim Smolyakov) #8

У меня нет опыта в Ruby+WebDriver, но такое поведение команды .text кажется странным - в Java команда .getText() возвращает текст вместе с содержимым всех вложенных элементов, что логично. Работа WebDriver ведь не должна зависеть от используемого языка?

Кажется, где-то здесь и кроется проблема. Что это значит?

В зависимости от внешних факторов страница может открыться с наличием или без этого тега? Или тег может то появляться, то исчезать без перезагрузки страницы (что мне и представляется динамическим)?

И что значит появляется? Всегда есть текст Ruby и он то обрамляется тегом <em>, то нет? Или появляется и исчезает кусок <em>Ruby</em> целиком? Или имеется в виду что-то еще?


(rmerkushin) #9

Добавлю еще что есть вероятность что элемент em добавляется после выполнения кода. Возможно нужен wait. :smile:


(Maksim Smolyakov) #10

Да, к этому я и веду)


(Zemlyaniy Ivan) #11

Друзья, позвольте вернуться к теме обсуждения (( Глюк так и не поборол ( Может кто-то сможет запустить код и понять, почему часть текста теряется? (( Это какая-то мистика ((

require 'selenium-webdriver'
driver = Selenium::WebDriver.for(:firefox)
driver.manage.delete_all_cookies
driver.manage.window.resize_to 1280, 800
driver.navigate.to 'https://www.upwork.com/o/profiles/browse/?q=Ruby%20Selenium'
parsed_data = []
driver.find_elements(:css, '.oDescription.m-md-top.m-0-bottom > em').map { |value| parsed_data << value.text }
puts parsed_data.inspect
driver.quit

Плиз, обратите внимание на пустые строки в листе, а там должен был текст ((