javascript – 自動化Chrome
當我將一些urlencoded Javascript貼上到Firefox和Chrome上的URL時,我看到一些野蠻的事情發生.可以使用這種技術來告訴Chrome訪問URL,然後將其另存為檔案?我試圖使Chrome自動化,而Selenium看起來非常艱鉅.
編輯:不幸的是,我忘了在這裡更清楚.讓我解釋.像wget,curl等等都不行,因為我必須通過這些指令碼中的一些登入.我看過iMacros,但是發現我不能讓它們從命令列執行,除了Windows,除非我支付$499的包. GCE的其他優點在於,開發平臺在一定程度上是免費的,開放的平臺是跨平臺的. (我使用Linux.)
編輯:此時,我正在瞭解Google Chrome擴充套件程式.看起來他們很容易構建,並讓我(我想)告訴瀏覽器開啟一個新的標籤頁,轉到頁面,操縱該頁面上的DOM(如填充一些欄位並登入),然後操作DOM在響應頁面上. GCE不允許您執行檔案I / O,因此它們不像XPCOM的Firefox擴充套件,但您可以通過使用AJAX將資料傳送到後端指令碼(如LAMP伺服器上的PHP指令碼)來儲存那個資料.
編輯:順便提一句,這是稍微偏離主題(但我補充說明),我提到的Javascript中的那些“野外事物”當你操縱DOM建立一個如下所示的URL時:
javascript:(function(){...your URL-encoded Javascript here...})();
的Web任務.它是WebKitGtk的一種Python繫結,它使用與Kernel相同的引擎.
感謝這篇博文,pywebkitgtk – Execute JavaScript from Python ,我做了一個webkit.WebView子類,使這些任務更容易.
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()
我添加了一個名為eval_script的函式,就像execute_script一樣,但是您可以將函式的結果作為Python物件.您只需確保您正在評估的是JSON序列化.
此外,我添加了一個很自明的wait_for_load函式.
要設定一個UI,您首先必須建立一個視窗,滾動視窗和Web檢視.
# 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()
然後你可以開始自動化的東西!例如,此程式碼載入StackOverflow的登入頁面,單擊Facebook登入按鈕,填寫使用者名稱和密碼(在本例中為“test”).最後,它顯示登入按鈕文字.
# 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')
在我的情況下,Facebook的介面是泰語,我可以看到登入的按鈕文字.
Login’s button text is: เข้าสู่ระบบ
您也可以通過單擊該元素上的click()來實際單擊提交按鈕. (注意:click()適用於按鈕元素,而不是連結)
web_view.execute_script('document.querySelector("#buttons input[type=\\"submit\\"]").click()') web_view.wait_for_load()
您將注意到,在所有指令碼完成後,應用程式將自動關閉,而無需等待.
如果您希望在完成所有指令碼後保持應用程式執行,則需要新增最後一行:
gtk.main()
另外,如果你刪除了window.show_all()行和最後一個gtk.main()行.那麼你的應用程式將在沒有GUI的情況下工作. (注意:您仍然需要顯示伺服器.)
現在,我們還沒有好的pywebkitgtk文件,所以你必須看看WebKitGtk’s documentation .祝你好運.
http://stackoverflow.com/questions/4730906/automating-chrome