Механизм и Javascript

Я хочу использовать Mechanize для имитации просмотра веб-страницы с активным JavaScript, включая DOM Events и AJAX, и до сих пор я не нашел способа сделать это.

Я посмотрел на некоторые клиентские браузеры Python, которые поддерживают JavaScript, такие как Spynner и Zope, и никто из них действительно не работает для меня. Spynner постоянно терпит крах PyQt, и Zope не поддерживает JavaScript, как кажется.

Есть ли способ имитировать просмотр только с помощью Python, без дополнительных процессов, таких как WATIR или библиотеки, которые управляют Firefox или Internet Explorer, полностью поддерживая Javascript, как будто на самом деле просматривает страницу?

  • Невозможно импортировать модуль python, который определенно установлен (механизировать)
  • Ошибка Http 405/500 в Python / Mechanize (с использованием автоматической авторизации на одном сайте)
  • Python, Mechanize - запрос, запрещенный robots.txt, даже после set_handle_robots и add_headers
  • Как обрабатывать IncompleteRead: в python
  • Сырое HTML против DOM соскабливания в питоне с использованием механизации и красивого супа
  • mechanize (python) нажмите на ссылку типа javascript
  • Получение сертификата проверяет ошибку с механизацией
  • Python mechanize javascript
  • 5 Solutions collect form web for “Механизм и Javascript”

    Я играл с этой новой альтернативой Mechanize (которую я люблю) под названием Phantom JS .

    Это полный браузер веб-комплекта, такой как Safari или Chrome, но безгласный и доступный для сценариев. Вы создаете скрипт с помощью javascript, а не python (насколько я знаю, по крайней мере).

    Есть несколько сценариев, которые помогут вам начать работу. Это очень похоже на использование Firebug. Я потратил несколько минут на это, но обнаружил, что с самого начала я был достаточно продуктивным.

    С http://wwwsearch.sourceforge.net/mechanize/faq.html#general

    Если вы столкнетесь с этим на странице, которую хотите автоматизировать, у вас есть четыре варианта. Здесь они, примерно в порядке простоты.

    Выясните, что делает JavaScript и эмулирует его в коде Python: например, вручную добавляя файлы cookie в ваш экземпляр CookieJar, вызывая методы в HTMLForms, вызывая urlopen и т. Д. См. Выше re forms.

    Используйте Java HtmlUnit или HttpUnit из Jython, так как они знают какой-то JavaScript.

    Вместо использования механизации вместо этого автоматизируйте браузер. Например, используйте MS Internet Explorer через свои интерфейсы автоматизации COM, используя расширения Python для Windows, aka pywin32, aka win32all (например, простая функция, pamie; глава pywin32 из книги O'Reilly) или ctypes (пример). Подобные вещи также могут оказаться полезными в Windows для случаев, когда API автоматизации отсутствует. Для Firefox есть PyXPCOM.

    Получите амбициозность и автоматически делегируйте работу соответствующему интерпретатору (например, интерпретатор JavaScript Mozilla). Это то, что делают HtmlUnit и httpunit. Несколько лет назад я сделал шип вдоль этих линий, но я думаю, что (все же) будет довольно много работы, чтобы преуспеть.

    В принципе, если вы хотите что-то, что связано с javascript, то вам нужен настоящий механизм javascript, это неизбежно связано с автоматизацией реального браузера (я включаю в него безголовые).

    Java HtmlUnit не очень хорошо работает, так как он не использует механизм javascript из реального браузера. Phantom JS звучит идеально (как отмечает newz2000), однако я обнаружил, что при манипулировании страницами с javascript может быть очень сложно отладить ваш скрипт, если вы не можете увидеть страницу, с которой имеете дело.

    Это приводит к таким решениям, как Selenium Webdriver, который имеет полный API-интерфейс python для автоматизации различных браузеров, однако вы должны запускать java-банку, и на самом деле запускает браузер, а не чистое решение python, за которым вы после (но я думаю, что это так близко, как вы можете получить).

    Пример использования PyV8 для запуска JS на DOM с помощью python можно найти здесь:

    https://github.com/buffer/thug

    Это должно быть довольно легко заставить его работать вместе с механизацией.

    Вы можете использовать Selenium с Python. Затем вы можете очистить содержимое, сгенерированное JavaScript, а также манипулировать страницей дополнительным JavaScript (а также Python).

    # In your virtualenv: pip install selenium from selenium import webdriver # Launch Firefox GUI browser = webdriver.Firefox() # Alternatively, you can drive PhantomJS without a GUI # With Node.js installed: `npm install -g phantomjs` # browser = webdriver.PhantomJS() # Fetch a webpage browser.get('http://example.com') # If you need the whole HTML document # just like inspecting the rendered page with the console html = browser.page_source # Get an element, even if it was created with JS button = browser.find_element_by_css_selector('div.some-class > \ input.the-submit-button') # Click on something button.click() # Execute some JavaScript (assumes jQuery is loaded on the page) browser.execute_script("$('html, body').animate({ scrollTop: 500 }, 50);") 

    Вы можете запустить код в Python REPL и использовать автозаполнение, чтобы обнаружить методы, доступные в browser или любой другой элемент, который вы выбрали. Или сделайте что-нибудь вроде print(dir(browser)) чтобы посмотреть, что доступно.

    Python - лучший язык программирования в мире.