Управление браузером с помощью Python на Mac
Я ищу способ программного управления браузером на Mac (например, Firefox или Safari или Chrome/-ium или Opera, но не IE) с помощью Python.
действия, которые мне нужны, включают следующие ссылки, проверку наличия элементов на странице и отправку форм.
какое решение вы бы порекомендовали?
10 ответов
проверить python-browsercontrol
.
кроме того, вы можете прочитать эту страницу форума (Я знаю, она старая, но она кажется чрезвычайно актуальной для вашего вопроса): http://bytes.com/topic/python/answers/45528-python-client-side-browser-script-language
также:http://docs.python.org/library/webbrowser.html
пример:
from browser import *
my_browser = Firefox(99, '/usr/lib/firefox/firefox-bin') my_browser.open_url('cnn.com')
open_url
возвращает, когда cnn.com Домашняя страница документа загружается в рамка браузера.
может быть немного жесткими, но py-appscript может быть самым простым способом управления браузером Applescript из Python.
для более сложных вещей вы можете использовать PyObjC для достижения почти всего - например,webkit2png - это скрипт Python, который использует WebKit для загрузки страницы и сохранения ее изображения. Вам нужно иметь достойное понимание Objective-C и Cocoa/etc, чтобы использовать его (поскольку он просто предоставляет объекты ObjC Python)
экран-scaping может достичь того, что вы хотите, с гораздо меньшей сложностью.
проверить spynner модуль Python.
Spynner-это программный модуль веб-браузера с состоянием для Python. Он основан на PyQT и WebKit. Он поддерживает Javascript, AJAX и все другие технологии, которые !WebKit способен обрабатывать (Flash, SVG,...). Spynner использует jQuery. мощная библиотека Javascript, которая упрощает взаимодействие со страницами и симуляцией событий.
используя Spynner, вы сможете имитировать веб-сайт браузер без GUI (хотя окно просмотра может быть открыто для отладки), поэтому его можно использовать для реализации искателей или инструментов приемочного тестирования.
посмотреть некоторые примеры на странице GitHub.
попробовать механизировать, если не на самом деле нужен браузер.
пример:
import re
import mechanize
br = mechanize.Browser()
br.open("http://www.example.com/")
# follow second link with element text matching regular expression
response1 = br.follow_link(text_regex=r"cheese\s*shop", nr=1)
assert br.viewing_html()
print br.title()
print response1.geturl()
print response1.info() # headers
print response1.read() # body
br.select_form(name="order")
# Browser passes through unknown attributes (including methods)
# to the selected HTMLForm.
br["cheeses"] = ["mozzarella", "caerphilly"] # (the method here is __setitem__)
# Submit current form. Browser calls .close() on the current response on
# navigation, so this closes response1
response2 = br.submit()
несколько приложений Mac можно управлять с помощью OSAScript (a.к. a. AppleScript), который можно отправить через . У о'Рейли есть статьи о вызове osascript
из Python. Я не могу поручиться, что он делает именно то, что вы хотите, но это отправная точка.
может быть, подавлен, но проверьте марионеток для управления Firefox. Есть учебник в readthedocs:
вы первый начать экземпляр firefox с поддержкой марионеток:
firefox -marionette
затем вы создаете клиента:
client = Marionette('localhost', port=2828)
client.start_session()
навигация f.бывший. делается через
url = 'http://mozilla.org'
client.navigate(url)
client.go_back()
client.go_forward()
assert client.get_url() == url
Оформить Заказ Mozmill https://github.com/mikeal/mozmill
Mozmill-это платформа автоматизации пользовательского интерфейса для приложений Mozilla, таких как Firefox и Thunderbird. Это как аддон, так и инструмент командной строки Python. Аддон предоставляет среду IDE для написания и запуска тестов JavaScript, а пакет Python - механизм запуска тестов из командной строки, а также способ тестирования перезапуска приложения.
посмотри PyShell (расширение PyXPCOM).
пример:
promptSvc = components.classes["@mozilla.org/embedcomp/prompt-service;1"].\
getService(Components.interfaces.nsIPromptService)
promptSvc.alert(None, 'Greeting...', "Hello from Python")
можно использовать selenium
библиотека для Python, вот простой пример (в виде unittest
):
#!/usr/bin/env python3
import unittest
from selenium import webdriver
class FooTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.base_url = "http://example.com"
def is_text_present(self, text):
return str(text) in self.driver.page_source
def test_example(self):
self.driver.get(self.base_url + "/")
self.assertTrue(self.is_text_present("Example"))
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(FooTest)
result = unittest.TextTestRunner(verbosity=2).run(suite)