从网上查到Python的urllib,urllib2可以模拟web的客户端操作。
下面是我想操作的一个页面部分代码(完整的看附件),请问怎样用 Python模拟点下按钮的操作。
谢谢,请赐教!(如果可能的话,请说的详细一点,本人比较菜)
index.jsp
...
...
...
...
...
...
URL jmxURLPrefix = new URL(jmxBase, "invoke?operation=build&objectname=CruiseControl+Project%3Aname%3D");
...
...
...
<br> function callServer(url, projectName) {<br> document.getElementById('serverData').innerHTML = '<iframe src="' + url + '" width="0" height="0" frameborder="0"></iframe>';<br> alert('Scheduling build for ' + projectName);<br> }</p> <pre><code>function checkIframe(stylesheetURL) { if (top != self) {//We are being framed! //For Internet Explorer if (document.createStyleSheet) { document.createStyleSheet(stylesheetURL); } else { //Non-ie browsers var styles = "@import url('" + stylesheetURL + "');"; var newSS = document.createElement('link'); newSS.rel = 'stylesheet'; newSS.href = 'data:text/css,' + escape(styles); document.getElementsByTagName("head")[0].appendChild(newSS); } } } </code></pre> <p>
...
...
...
[b]问题补充:[/b]
首先感谢RyanPoy回答。
我在网上察看的urllib和urllib2的时候,
所给出的例子都是提交表单的,而我这个jsp中则是个iframe(?),所以就有些不明白了。
这里是像服务器提交一个网址吗?
比如我这个jsp的实际URL为http://192.168.15.72:8080/,
我用urllib.urlopen('http://192.168.15.72:8080/').readlines()
打开URL,然后呢?怎样处理那个iframe呢?
[b]问题补充:[/b]
我当然知道urllib的基本应用,
我最想知道的是怎样模拟点下按钮的操作。
我想既然点下了按钮,那时不是向服务器发送了什莫请求。
然后服务器处理请求,实现我点下按钮的效果。
看这个jsp,点下按钮他会调用callServer函数,
而callServer函数有效的命令只有:
document.getElementById('serverData').innerHTML = '';
他好像是让隐藏的div(
我想知道怎样用程序实现向服务器发送这个请求?
[b]问题补充:[/b]
不用urllib也行,只要能实现,用什莫都行!
[b]问题补充:[/b]
我再想办法把。
本来我是想通过python直接操作http的。。。
还有一个不太好的方法,就是通过操作IE或firefox等浏览器来达到点击按钮的目的,如果有空的话可以看看Selenium IDE或Selenium RC,这是个自动测试工具。可以录制操作浏览器的动作,然后回放。
总之,谢谢你的回答。
[quote]问题补充:
我最想知道的是怎样模拟点下按钮的操作。
我想既然点下了按钮,那时不是向服务器发送了什莫请求。
然后服务器处理请求,实现我点下按钮的效果。
我想知道怎样用程序实现向服务器发送这个请求?
问题补充:
不用urllib也行,只要能实现,用什莫都行! [/quote]
你的请求我不知道有没有什么方法可以做到。
但是urllib绝对做不到。他能做到的是你知道你要请求的内容。而不是模拟一个点击或者其他的事件,从而代替人来浏览网页。
如果你能找到好的工具(虽然我认为可能性很低),希望你能分享一下。
我想eros1513不太python中的urllib和urllib2。
其实,这两个东西相当于java里面的URL, 你可以看看这方面的资料。
这里给你一个urllib的例子:
import urllib
print '\n'.join(urllib.urlopen('http://google.com').readlines())
这个会把google.com的源代码down下来。同样的,如果你要模拟一个页面的按钮提交。你需要知道这个按钮提交会提交到哪,产生什么提交参数。这样的话,你可以拼成一个url,然后代替上面的'http://google.com', 就达到你要的效果了。
至于urllib 和 urllib2,他们的区别几乎没有。我所遇到的不同是:urllib里面有一个unqount_plus, 而urllib2里面没有。而这个方法是为了解决ie的一个问题。就是ie在提交参数的时候,会把空格变成'+'号。
[quote]问题补充:
首先感谢RyanPoy回答。
我在网上察看的urllib和urllib2的时候,
所给出的例子都是提交表单的,而我这个jsp中则是个iframe(?),所以就有些不明白了。
这里是像服务器提交一个网址吗?
比如我这个jsp的实际URL为http://192.168.15.72:8080/,
我用urllib.urlopen('http://192.168.15.72:8080/').readlines()
打开URL,然后呢?怎样处理那个iframe呢? [/quote]
呵呵。你执行了urllib.urlopen('http://192.168.15.72:8080/').readlines()拿到的是你这次请求后服务器端返回给你的内容。你打印出来后就可以看到。至于你该怎么去处理iframe,那么你需要自己去解析服务器端返回给你的内容。
其实,这个urllib和urllib2可以理解成为一个简单的网页下载库。记住,只是下载,它不会去分析下载后的内容。需要你自己来分析。