Vol*_*ike 17 javascript automation google-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 Extensions,但你可以通过使用AJAX将数据发送到后端脚本(如LAMP服务器上的PHP脚本)来节省那个数据.
编辑:顺便说一句,这是稍微偏离主题(但我添加澄清)Javascript中的那些"狂野的东西",我提到当你操纵DOM创建一个看起来像这样的URL:
javascript:(function(){...your URL-encoded Javascript here...})();
Run Code Online (Sandbox Code Playgroud)
Tha*_*hai 11
您可以使用Python使用pywebkitgtk自动执行Web任务.它是WebKitGtk的Python绑定,它使用WebKit引擎,与chrome相同的引擎.
感谢这篇博客文章pywebkitgtk - 从Python执行JavaScript,我创建了一个子类,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()
Run Code Online (Sandbox Code Playgroud)
我添加调用的函数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()
Run Code Online (Sandbox Code Playgroud)
然后你就可以开始自动化了!例如,此代码加载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')
Run Code Online (Sandbox Code Playgroud)
就我而言,Facebook的界面是泰语,我可以看到登录的按钮文字.
登录的按钮文字是:เข้าสู่ระบบ
您也可以通过调用click()该元素实际单击提交按钮.(注意:click()适用于按钮元素,不适用于链接)
web_view.execute_script('document.querySelector("#buttons input[type=\\"submit\\"]").click()')
web_view.wait_for_load()
Run Code Online (Sandbox Code Playgroud)
您将注意到,在完成所有脚本之后,应用程序将自行关闭而无需等待.
如果要在完成其中的所有脚本后保持应用程序运行,则需要添加最后一行:
gtk.main()
Run Code Online (Sandbox Code Playgroud)
此外,如果您删除window.show_all()行和最后gtk.main()一行.然后你的应用程序将无需GUI.(注意:您仍然需要一台显示服务器.)
现在,我们还没有好的pywebkitgtk文档,所以你必须查看WebKitGtk的文档.祝好运.
Vol*_*ike 10
解决方案似乎是制作一个自己的谷歌浏览器扩展程序(GCE).如果你知道如何做一些稍微高级的Javascript东西,它很容易在大约4小时内学习,并且非常强大.我可以使用Tabs API创建新选项卡并转到特定URL.然后,我可以将jQuery注入到该URL中,并使其操作DOM或执行我们通常可以使用jQuery执行的任何操作.我无法进行文件I/O,但有两种解决方法.一,我可以强制浏览器从远程位置下载文件,我可以通过jQuery的$ .get()或$ .post()调用将数据从当前页面发送回远程服务器.
| 归档时间: |
|
| 查看次数: |
31309 次 |
| 最近记录: |