Как извлечь текст из элемента, родительский элемент которого имеет атрибут style = "display: none", с помощью Selenium - PullRequest
0 голосов
/ 08 июня 2018

This Image Shows my Html Source

Я хочу извлечь номер телефона из этого раздела.Этот div имеет style = "display: none", поэтому я не могу получить доступ к дочерним элементам этого div.Пожалуйста, помогите мне получить номер телефона от div.

Я думаю, нам нужно изменить это отображение: нет;для видимости: видимый.Как я могу сделать это в Python Selenuim

Редактировать

Я попробовал приведенный ниже код, как предлагается в первом ответе, но выдает следующую ошибку:

email_div = browser.find_element_by_class_name("returnemail")
email_div_contents = browser.execute_script('return arguments[0].innerHTML', email_div)
telephone = email_div_contents.find_element_by_class_name('reply-tel-number').get_attribute('textContent')

AttributeError: у объекта 'str' нет атрибута 'find_element_by_class_name

'

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Ваш код имеет неправильное место:

email_div = browser.find_element_by_class_name("returnemail")
email_div_contents = browser.execute_script('return arguments[0].innerHTML', email_div)
email_div_contents.find_element_by_class_name()

email_div_contents - это строка, представляющая HTML-код email_div, а не веб-элемента. Вы не можете вызвать find_element_by_class_name() для строки,

Вот почему вы получили ошибку:

У объекта 'str' нет атрибута 'find_element_by_class_name'

Вы всегда можете вызвать get_attribute(), чтобы получить атрибутзначение видимого и невидимого элемента.

Чтобы получить текстовое содержимое невидимого элемента, вы можете использовать get_attribute('innerText').

phone_number = driver.find_element_by_css_selector("div.returnemail .reply-tel-number")
                     .get_attribute('innerText')

На самом деле, element.text вызовите element.get_attribute('innerText') внутри, но element.text будет учитывать опыт пользователя:Если пользователь не видит элемент со страницы, element.text вернет пустую строку, как видит пользователь.(Четное element.get_attribute('innerText') возвращает непустую строку)

   @property
   text:
     if ( element is visible ):
        return element.get_attribute('innerText')

     else:
        return ''
0 голосов
/ 08 июня 2018

Согласно документации execute_script() возвращает:

Ответ команды JSON, загруженный в объект словаря.

Следовательно, движение вперед при попытке вызвать *Метод 1008 * в объекте словаря выглядит следующим образом:

email_div_contents.find_element_by_class_name('reply-tel-number').get_attribute('textContent')

Возникает следующая ошибка:

AttributeError: объект 'str' не имеет атрибута 'find_element_by_class_name '


Чтобы удалить атрибут style = "display: none" из требуемого элемента и извлечь номер телефона , который вы можете использоватьследующее решение:

element = driver.find_element_by_xpath("//div[@class='returnemail js-only']")
driver.execute_script("arguments[0].removeAttribute('style')", element)
tel_number = element.find_element_by_xpath("./aside/ul//li//p[@class='reply-tel-number']").get_attribute("innerHTML")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...