Możesz używać Pythona do automatyzacji zadań internetowych przy użyciu pywebkitgtk. Jest to powiązanie Pythona dla WebKitGtk, który używa silnika WebKit, tego samego silnika, co chrome.
Dzięki temu wpisowi na blogu, pywebkitgtk - Execute JavaScript from Python, stworzyłem podklasę webkit.WebView
, aby ułatwić te zadania.
import gtk
import webkit
import json
class WebView(webkit.WebView):
def eval_script(self, script):
self.execute_script('oldtitle=document.title;document.title="!!!!";document.title=JSON.stringify(eval(' + json.dumps(script) + '));')
result = json.loads(self.get_main_frame().get_title())
self.execute_script('document.title=oldtitle;')
return result
def wait_for_load(self):
handle = None
def load_status_cb(view, frame):
if frame == view.get_main_frame():
self.disconnect(handle)
gtk.main_quit()
handle = self.connect('load-finished', load_status_cb)
gtk.main()
dodałem funkcję zwaną eval_script
który jakby execute_script
, ale można dostać wyniki funkcji jako obiektów Pythona.Musisz tylko upewnić się, że to, co oceniasz, jest serializowane przez JSON.
Dodałem także funkcję wait_for_load
, która jest całkiem zrozumiała.
Aby skonfigurować interfejs użytkownika, musisz najpierw utworzyć okno, przewijane okno i widok WWW.
# window
window = gtk.Window()
window.set_default_size(800, 600)
# scroll view
scroll_view = gtk.ScrolledWindow()
scroll_view.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC
scroll_view.props.vscrollbar_policy = gtk.POLICY_AUTOMATIC
# web view
web_view = WebView()
# events
window.connect('delete-event', lambda window, event: gtk.main_quit())
# show
scroll_view.add(web_view)
window.add(scroll_view)
window.show_all()
Następnie można rozpocząć automatyzację! Na przykład ten kod ładuje stronę logowania StackOverflow, kliknij przycisk logowania do Facebooka, wypełnia nazwę użytkownika i hasło (w tym przypadku "test"). Na końcu pokazuje tekst przycisku logowania.
# the script is here
web_view.open('http://www.stackoverflow.com/users/login')
web_view.wait_for_load()
web_view.execute_script('openid.signin("facebook")')
web_view.wait_for_load()
web_view.execute_script('document.querySelector("#email").value = "test"')
web_view.execute_script('document.querySelector("#pass").value = "test"')
print "Login's button text is:", web_view.eval_script('document.querySelector("#buttons input[type=\\"submit\\"]").value')
W moim przypadku interfejs Facebooka był w języku tajskim i mogłem zobaczyć tekst przycisku logowania.
się zalogować na przycisk tekst: เข้า สู่ ระบบ
Można również faktycznie kliknij w przycisk, po prostu dzwoniąc click()
na tym elemencie. (Uwaga: click()
prace dla elementów przycisków, a nie na linki)
web_view.execute_script('document.querySelector("#buttons input[type=\\"submit\\"]").click()')
web_view.wait_for_load()
Można zauważyć, że wszystkie skrypty po zakończeniu aplikacja zamyka się bez oczekiwania.
Jeśli chcesz zachować aplikacji działającej po zakończeniu wszystkich skryptów tam, trzeba dodać ostatnią linię:
gtk.main()
Ponadto, jeśli usunąć wiersz window.show_all()
i ostatni gtk.main()
linię. Wtedy Twoja aplikacja będzie działać bez GUI. (Uwaga: trzeba jeszcze serwer wyświetlania.)
tej chwili nie mamy jeszcze dobre docs pywebkitgtk, więc trzeba spojrzeć na WebKitGtk's documentation zamiast. Powodzenia.
Czy jesteś na maszynie nix? Jeśli tak, 'wget' jest twoim przyjacielem! –
Dostępne jest darmowe narzędzie [Kantu Web Automation] (https://kantu.io) - działa ono z Chromium i pozwala zautomatyzować strony za pomocą zrzutów ekranu. Posiada również interfejs wiersza poleceń i interfejs API. – Tienkamp