Механизм и Javascript

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

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

Есть ли способ имитировать просмотр только с помощью Python, без дополнительных процессов, таких как WATIR или библиотеки, которые управляют Firefox или Internet Explorer, полностью поддерживая 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)) чтобы посмотреть, что доступно.

  • Поиск требований, эквивалентных возможностям Mechanize
  • Python Mechanize выберите форму FormNotFoundError
  • Веб-скребок для динамических форм в python
  • Ограничьте ограничения br.submit ()?
  • Как обрабатывать IncompleteRead: в python
  • python mechanize forms () err
  • Как проверить всплывающие окна веб-страниц?
  • Ошибка - ошибка urlopen _ssl.c: 504: EOF произошел с нарушением протокола, нужна помощь
  • Python - лучший язык программирования в мире.