Использовать Python для открытия веб-браузера (в Windows), запускать действия JavaScript и получать HTML-содержимое? - PullRequest
1 голос
/ 26 января 2012

Да, это звучит слишком сложно.

Я пытаюсь получить данные со страниц нашей интрасети. Страницы в безопасности. При попытке получить содержимое с помощью urllib.urlopen () отказывается соединение.

Поэтому я хотел бы использовать python, чтобы открыть веб-браузер, чтобы открыть сайт, а затем щелкнуть некоторые ссылки, которые вызывают всплывающие окна javascript, содержащие таблицы с информацией, которую я хочу собрать.

Любые предложения о том, с чего начать?

Я знаю формат страницы. Это что-то вроде этого:

<div id="list">
    <ul id="list item">
        <li><a onclict="Openpopup('1');">blah</a></li>
    </ul>
    <ul></ul>
    etc

Затем скрытая рамка становится видимой, и поля в таблице заполняются.

<div>
    <table>
       <tr><td><span id="info_i_want">...

Ответы [ 4 ]

5 голосов
/ 26 января 2012

Прежде всего, я полагаю, что лучше выяснить, что нужно странице, которую предоставляет JS, и подделать это - вам будет легче почистить страницу, если браузер не задействован.

Если это просто Javascript, создающий XMLHttpRequest, вы можете найти страницу, с которой Javascript извлекает данные iframe и подключается непосредственно к этому.

Но, несмотря на это, вам может понадобитьсябиблиотека, выполняющая Javascript (если обратная инженерия слишком сложна или использует токены вызова).Веб-рендеринг, такой как Gecko или WebKit, может подойти.

Внимательно посмотрите на Selenium , если вы настаиваете на использовании настоящего веб-браузера или не можете заставить работать программные методы.

Как только вы получили содержимое страницы любым способом, вам потребуется HTML-анализатор (например, sgmllib или [почти] xml.dom).Я предлагаю библиотеку DOM.Проанализируйте DOM и извлеките содержимое из соответствующего узла в результирующем дереве.

3 голосов
/ 26 января 2012

The connection is refused when I try to get the contents with urllib.urlopen()., вероятно, означает, что вы должны отправить запрос с помощью модуля python urllib. Я бы посоветовал вам использовать urllib2 . Возможно, вам также потребуется обработать куки , referrer,user-agent из вашего кода Python.

Чтобы увидеть все запросы на публикацию, отправленные из вашего браузера, используйте firefox's live-http-headers .

Для части javascript,

Лучше всего запустить браузер без головы, например, phantomjs , который понимает все тонкости JavaScript, DOM и т. Д., Но вам придется писать свой код на Javascript, преимущество в том, что вы можете делать все, что хотите .

Как и @phihag, упомянутый selenium также является хорошим вариантом.

1 голос
/ 27 января 2012

Попробуйте взглянуть на splinter , который является более простым API веб-драйвера, чем Selenium.

1 голос
/ 26 января 2012

Прежде всего, вы должны действительно выяснить, почему в соединении отказано при доступе к странице с помощью Python.Скорее всего, вам придется выполнить HTTP-аутентификацию или указать другой User-Agent.

Запуск браузера, навигация и возврат HTML - сложная задача.К счастью, вы можете реализовать это, используя селен .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...