2013-12-04 5 views
1

номера телефона это элемент я должен получить внутренний текстполучить текстовое значение узла() с селеном + питоном

<a href="tel:895**49****" class="button-text action-link" title="Телефон продавца" rel="nofollow"> 
"8 9** **9-99-**" 
</a> 

, когда я использую

phone = driver.find_element_by_class_name('button-text') 
print phone.text 

возвращает пустую строку, так как номер телефона в "" это текст() узел

и когда я пытаюсь это

print driver.find_element_by_xpath('/html/body/section/article/section[2]/ul/li[1]/a/text()') 

или это

print driver.find_element_by_xpath('/html/body/section/article/section[2]/ul/li[1]/a/text()').text 

возвращает ошибку InvalidSelectorException: Сообщение: u'Error Сообщение => \ 'Результат выражения XPath «/ HTML/тело/раздел/статьи/раздел [2]/мкл/li [1]/a/text() "is: [объект Текст]. Это должен быть элемент.

ответ

4

Вы должны указать xpath для возвращаемого элемента, а не текста. Потому что селен работает с элементами.

  1. Первый найти элемент (с использованием XPath или CSS селекторов, ...)
  2. Затем вызывается метод на элемент для возвращения его текст

Это должно работы:

print driver.find_element_by_xpath('/html/body/section/article/section[2]/ul/li[1]/a').text 

Примечание: выражение xpath не может содержать функцию text() (или аналогичную) в конце, потому что она вызывает элемент (ы), требующий возврата текста и селена. Это верно для селена 2 (webdriver) в Java.

+0

Нету, он возвращает пустую строку, тоже, как ** driver.find_element_by_class_name («кнопка-текст»). Текст ** я думаю, потому что номер телефона это текстовый узел, а не внутренний текст ** а ** –

+0

Хм, я использую java (не python), но если вы получаете пустую строку, вы можете попробовать вызвать метод getAttribute на объекте WebElement - что-то вроде этого в java: 'driver.findElement (By.xpath ()). GetAttribute ("innerHTML") '; – Danix

+0

ну, он должен работать, но он не работает, потому что этот сайт генерирует номер телефона неизвестным методом и помещает его в новый текстовый узел! и ** get_attribute ('innerHTML') ** возвращает предыдущее значение на этой кнопке - «Показать номер». я должен нажать на эту кнопку, подождать 2 секунды и получить новый внутренний текст (номер телефона, который появляется после нажатия). Я делаю это manupulation правильно, и он отлично работает. ** driver.find_element_by_xpath ('/ HTML/тело/раздел/статьи/раздела [2]/мкл/Li [1]/а').текст ** также работает и возвращает строгий текст, но пока я не щелкнул. Я думаю, что это было сделано для защиты номеров телефонов, и мне нужно их очистить. –

0

Я бы рекомендовал использовать следующие «предпочтительные атрибуты» для соответствия, а не классов.

Предпочтительные атрибуты:

  1. ID
  2. Имя
  3. Название

Поскольку ваш элемент имеет атрибут заголовка, матч на этом с помощью CSS. Спасите себя от хлопот и бедра, что есть, xpath.

print driver.find_element_by_css("a[title='Телефон продавца']").text 
Смежные вопросы