Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 19, 2014 17:14:08

hdj
Зарегистрирован: 2014-11-19
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Не полностью отображается html-код для со страницы

Здравствуйте. Нужно получить html-код со страницы. Но html-код с FireBug в FireFox отличается от html-кода, получаемого с помощью метода urllib.request.openurl() или просто просмотра html-кода страницы через браузер - не отображает некоторые “кнопки”.

Вопрос - почему не весь html-код отображается?

Отредактировано hdj (Ноя. 19, 2014 18:13:34)

Офлайн

#2 Ноя. 19, 2014 17:21:22

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Не полностью отображается html-код для со страницы

Зайдите на сайт с выключенным js - вы увидете ту же картинку что и openurl

Офлайн

#3 Ноя. 19, 2014 17:52:15

hdj
Зарегистрирован: 2014-11-19
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Не полностью отображается html-код для со страницы

Спасибо, отключил, так и получилось.
Где можно почитать как получить html-код с обработанным JS?
(Наверно, если бы был элемент веббраузер, то его можно было бы подключить в невидимом режиме, загрузить в нем страницу и затем считать html-код.)

Офлайн

#4 Ноя. 19, 2014 19:28:37

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Не полностью отображается html-код для со страницы

hdj
Спасибо, отключил, так и получилось.Где можно почитать как получить html-код с обработанным JS?(Наверно, если бы был элемент веббраузер, то его можно было бы подключить в невидимом режиме, загрузить в нем страницу и затем считать html-код.)

selenium, или можно выполнить js посредством PyExecJS + Node.js



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#5 Ноя. 20, 2014 12:16:12

hdj
Зарегистрирован: 2014-11-19
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Не полностью отображается html-код для со страницы

Ок, а селениум будет открывать старницы в браузере пользователя или можно это скрыть от глаз пользователя? Похоже нет.

Не могу найти функцию для получения html-кода страницы из загруженной селениумом страницы. Есть методы title и поиска элементов. А так чтоб весь html-код?

Отредактировано hdj (Ноя. 20, 2014 13:50:46)

Офлайн

#6 Ноя. 20, 2014 17:28:09

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Не полностью отображается html-код для со страницы

hdj
Есть методы title и поиска элементов
Вам же html-код нужен, чтобы как раз найти элементы, так?


Офлайн

#7 Ноя. 21, 2014 02:45:04

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Не полностью отображается html-код для со страницы

hdj
Есть методы title и поиска элементов. А так чтоб весь html-код?
page_source



Офлайн

#8 Ноя. 21, 2014 16:19:01

hdj
Зарегистрирован: 2014-11-19
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Не полностью отображается html-код для со страницы

s0rg, ну вообще задача - собрать определенные данные со страницы…
pyuser, спасибо. Уже накатал кое-что:

# Пробуем получить html-код с выполненным js, используя Selenium WebDriver.
# innerHTML will return the inner HTML of this element,
# which contains all HTML tags inside
# http://yizeng.me/2014/04/08/get-text-from-hidden-elements-using-selenium-webdriver/
# http://stackoverflow.com/questions/7263824/get-html-source-of-webelement-in-selenium-webdriver
# http://internetka.in.ua/selenium-webdriver-normalization/
print ('----- Загрузка html-кода с выполненным js с помощью Селениума')
from selenium import webdriver
from selenium.webdriver.common.by import By
try:
    url = "http://***"
    
    wd = webdriver.Firefox()
    wd.get(url)
    s = wd.find_element(by=By.ID, value="***").get_attribute('innerHTML')
##    s = wd.find_element_by_xpath("//html").get_attribute('innerHTML')
    wd.quit()
except Exception as e:
    print("Неизвестная ошибка при загрузке и декодировании страницы в строку\n"
        + "Возможно сервер не доступен" + e.args)
    # Здесь надо прописать код по завершении работы приложения
print ('----- Html-код с выполненным js получен')

И заметил, что html-код, полученный методом .page_source отличается от .get_attribute('innerHTML'): в тэгах параметры идут в другой очереди (например href раньше, чем другой). Может еще что-то. Так-то он более оптимален?
Я не профессионал, так что в моем коде могут быть везде ошибки, или он не оптимален.

У меня вопросы:
- почему так плохо с документацией: и с python 3 и методы selenium. То ли я плохо ищу, или надо англ. хорошо знать?
- можно как-то сделать невидимым селениум браузер? (или какой другой)
- wd = webdriver.PhantomJS() - это обычный браузер или что? Почему эта строчка вызывает ошибку?
- встроенный метод в питоне WebBrowser - из него можно получить outerHtml?
- как более оптимально получать outerHtml?

Теряюсь

Отредактировано hdj (Ноя. 21, 2014 16:31:48)

Офлайн

#9 Ноя. 21, 2014 18:00:35

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Не полностью отображается html-код для со страницы

hdj
Я не профессионал, так что в моем коде могут быть везде ошибки, или он не оптимален.
Ошибки, могут быть и в коде профессионалов

Английский - это язык технической документации, так сложилось, знать его нужно обязательно.

hdj
можно как-то сделать невидимым селениум браузер? (или какой другой)
Что значит ‘невидимым’? Скрыть окно или вообще процесс?

hdj
встроенный метод в питоне WebBrowser - из него можно получить outerHtml?
Судя по документации - нет.

hdj
как более оптимально получать outerHtml
Давайте определим,, что и как вы собрались искать.

Офлайн

#10 Ноя. 21, 2014 18:19:35

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

Не полностью отображается html-код для со страницы

- wd = webdriver.PhantomJS() - это обычный браузер или что? Почему эта строчка вызывает ошибку?

Драйвер такой, “невидимый”, надо установить сперва его



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version