自动化Chrome

时间:2011-01-19 01:32:08

标签: javascript google-chrome automation

当我将一些urlencoded Javascript粘贴到Firefox和Chrome上的网址时,我发现了一些疯狂的事情。是否可以使用此技术告诉Chrome访问URL然后将其另存为文件?我正在尝试自动化Chrome,而Selenium看起来非常令人生畏。

编辑:不幸的是,我忘了在这里更清楚。让我解释。诸如wget,curl等之类的东西将不起作用,因为我必须通过其中一些脚本中的登录。我看了iMacros,但发现我不能让它们从Windows命令行运行,除非我支付499美元的套餐。 GCE的其他一些优点是开发平台在某种程度上是免费和开放的,并且它们是跨平台的。 (我使用Linux。)

编辑:此时,我正在了解Google Chrome扩展程序。看起来它们很容易构建,并且让我(我认为)告诉浏览器打开一个新选项卡,转到页面,操作该页面上的DOM(例如填充一些字段并登录),然后操纵响应页面上的DOM。 GCE不允许你进行文件I / O,因此它们不像使用XPCOM的Firefox Extensions,但你可以通过使用AJAX将数据发送到后端脚本(如LAMP服务器上的PHP脚本)来节省那个数据。

编辑:顺便说一句,这有点偏离主题(但我添加澄清)我提到的Javascript中的那些“狂野的东西”当你操纵DOM创建一个URL时看起来像这样:

javascript:(function(){...your URL-encoded Javascript here...})();

5 个答案:

答案 0 :(得分:10)

解决方案似乎是制作自己的Google Chrome Extension (GCE)。如果你知道如何做一些稍微高级的Javascript东西,它很容易在大约4小时内学习,并且非常强大。我可以使用Tabs API创建新选项卡并转到特定URL。然后,我可以将jQuery注入到该URL中,并使其操作DOM或执行我们通常可以使用jQuery执行的任何操作。我无法进行文件I / O,但有两种解决方法。一,我可以强制浏览器从远程位置下载文件,我可以通过jQuery的$ .get()或$ .post()调用将数据从当前页面发送回远程服务器。

答案 1 :(得分:10)

您可以使用Python使用pywebkitgtk自动执行Web任务。它是WebKitGtk的Python绑定,它使用WebKit引擎,与chrome相同的引擎。

感谢此博客帖子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的界面是泰语,我可以看到登录的按钮文字。

  

登录的按钮文字是:เข้าสู่ระบบ

您也可以让它实际点击提交按钮,只需在该元素上调用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。祝你好运。

答案 2 :(得分:0)

您可以尝试iMacros for Chrome。这是一个非常易于使用的自动化系统。

  1. 打开iMacros
  2. 点击记录
  3. 去浏览日常工作。
  4. 点击停止。
  5. 我认为它不会比这更容易。它保存的脚本是纯文本的,因此如果需要,您可以编辑它们以进行一些细粒度控制。

答案 3 :(得分:0)

绝对查看Watir!我发现它非常简单。它与Selenium一样容易,与Chrome,IE或Firefox一样。虽然Chrome的版本尚未得到官方支持,但他们声称它可以使用。我,我自己只用于Selenium,IE和Firefox。

此外,如果您正在寻找尖端的BDD(行为驱动开发),Watir可以轻松地与Cucumber集成。它只是Ruby代码,是开源的,并托管在gitHub上。享受!

答案 4 :(得分:0)

您可以结帐http://qaagent.com。这是一种自动执行某些与Web相关的任务的简便方法