Mechanize对WEB的操作

来源:互联网 发布:单片机浇花 编辑:程序博客网 时间:2024/06/04 20:10

http://my.oschina.net/u/588964/blog/104806


通过Mechanize模拟自然的浏览器行为来完成与网页之间的交互.  



# Mechanize的安装  
Mechanize的安装请查看 ->  Ruby library的安装  

# 使用Mechanize时,需要在脚本头部注明  
require 'mechanize'  

# Mechanize object的设定  
agent = WWW::Mechanize.new  

# 对虚拟的user_agent的设定  
agent.user_agent_alias = 'Windows IE 7'  

# 历史纪录的大小设  
agent.max_history = 1  

# 激活网址  
agent.get('http://www.test.com')  

# 网页连接超时设定  
agent.open_timeout = 10  

# 设定连接网页时的认证(要在激活网页前使用)  

agent.auth('username', 'password')  

# 读取网页的title标签  
page = agent.get('http://www.test.com')  
page.title  

# 取得当前网页的网址  
page = agent.get('http://www.test.com')  
page.uri  

# 读取网页的form标签  
page.forms.name('Name')  

# 使用form的action  
page.forms.action('test.php')  

# 如果网页中有多个form时  
page.forms[0]  

# 如果网页中有多个同名称或相同action的form时  
page.forms.name('Name').first  

# 使用传递方法进行判断  
page.forms.action('./test.php').find{|f| f.method == 'POST'}  

# 文本框,密码框,文本域的填写  
form = page.forms.name('Name').first  
form['文本框或文本域name'] = '填写内容'  
form.fields.name('文本框或文本域name').value = '填写内容'  

# submit标签  
form = page.form[0]  
form.submit  
form.submit(form.buttons.name('Name'))  

# CheckBox标签  
form = page.forms.name('chkbox')  
返回的值为 c1 = form.checkboxes[0].name  
返回的值为 val2 = form.checkboxes[1].value  
返回的值为 false = form.checkboxes.name("c1″).checked  

# 复选框的选择  
form.checkboxes.name('c1').check  
# 对应的HTML代码为:  
<form name="chkbox">  
  <input type="checkbox" name="c1″ value="val1″>复选框1  
  <br>  
  <input type="checkbox" name="c2″ value="val2″ checked>复选框2  
</form>  

# 单选框的选择  
form.radiobuttons.name('box')[1].check  

# 获得当前SelectList选择的选项及SelectList的设定  
form = page.forms.name(form1).first  
返回的值为  選択3 = form.fields.name('select1').value  
返回的值为 選択3 = form.fields.name('select1').options[2].select  

# 选项的选择  
form.name('select1').value = “1″  
对应的HTML代码为:  
<form name='form1' action="" method="post">  
   <select name='select1'>  
    <option value="1″>選択1</option>  
    <option value="2″>選択2</option>  
    <option value="3″ selected>選択3</option>  
  </select>  
</form>  

# SelectList多选择时为  
form.fields.name('select1') = ['one', 'three']  

# 对应的HTML代码为:  
<form>  
   <select name="select1″ size="3″ multiple>  
      <option value="one" selected>選択1</option>  
      <option value="two">選択2</option>  
      <option value="three" selected>選択3</option>  
   </select>  
</form>  

# 文件的上传  
# 方法一  
page.forms[0].file_uploads.name('upfile').file_name = './hoge.jpg'  
# 方法二  
page.forms[0].file_uploads.name('upfile').file_data = File.open('./hoge.jpg','rb'){|f| f.read}  

# 对应的HTML代码为:  
<form>  
   <input type="file" name="upfile" enctype="multipart/form-data">  
</form>  

# 网页中的超链接  
# 网页中的全部超链接的输出  
page = agent.get('http://www.test.com')  
page.links.each{|link| puts link.href}  

# 网页中超链接的击活(可使用正则表达式)  
page.links.href('http://www.test.com')[2].click  
page.links.text('文本')[0].click  

# frame网页的查看  
# 方法一:使用name查看  
page.frames.name('left').click  
# 方法二:使用链接查看  
leftpage = page.frames.src('frame_left.htm').click  
# 对应的HTML代码为:  
<frameset cols="150,*">  
  <frame src="frame_left.htm" name="left">  
  <frame src="frame_right.htm" name="right">  
</frameset>  

# 网页中的文件下载(正则表达式可用)  
agent = WWW::Mechanize.new  
data = agent.get_file('http://www.test.com/top.gif')  
open('top.gif', 'wb'){|f| f.write(data)}  
# 对应的HTML代码为:  
<img src="http://www.test.com/top.gif">  

# table部分的的文字  

page.root.search('table/tr/td'){|e| puts e} 


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
require'rubygems'
require'mechanize'
 
agent = WWW::Mechanize.new
agent.max_history = 1
agent.user_agent_alias = 'Windows IE 7'
 
page = agent.get("http://www.iteye.com/login")
form = page.forms[0]
form.fields[0].value = "javaeye帐号"
form.fields[1].value = "javaeye密码"
     
agent.submit form #登录JavaEye
 
page = agent.get("http://qichunren.iteye.com/admin/messages/new")# 这里的域名改成你个人的
form =  page.forms[0]
form.fields[0].value = "qichunren"# 消息接收者
form.fields[1].value = "测试消息"#标题
form.fields[4].value = %Q{
我代表火星全人类欢迎你加入火星圈子!
地址是http://mars.group.iteye.com/ 点击申请加入.
火星口号:火星新闻,火星笑话,火星文, 只要你的想法够火星 地球很危险 JE很严肃 大家还是回火星去吧
}
 
5.times{agent.submit form} # 把这个数字写成 1000 也是可以的,*_*


0 0