Mechanize模擬天然網頁交互一些基本經常使用方法

與網頁交互(Interacting With a Web Page) php

經過Mechanize模擬天然的瀏覽器行爲來完成與網頁之間的交互. java

# Mechanize的安裝 
Mechanize的安裝請查看 ->  Ruby library的安裝 正則表達式

# 使用Mechanize時,須要在腳本頭部註明 
require 'mechanize' 瀏覽器

# Mechanize object的設定 
agent = WWW::Mechanize.new ruby

# 對虛擬的user_agent的設定 
agent.user_agent_alias = 'Windows IE 7' post

# 歷史紀錄的大小設 
agent.max_history = 1 測試

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

# 網頁鏈接超時設定 
agent.open_timeout = 10 spa

# 設定鏈接網頁時的認證(要在激活網頁前使用) orm

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 
返回的值爲  xk3 = form.fields.name('select1').value 
返回的值爲 xk3 = 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″>xk1</option> 
    <option value="2″>xk2</option> 
    <option value="3″ selected>xk3</option> 
  </select> 
</form>

# SelectList多選擇時爲 
form.fields.name('select1') = ['one', 'three']

# 對應的HTML代碼爲: 
<form> 
   <select name="select1″ size="3″ multiple> 
      <option value="one" selected>xk1</option> 
      <option value="two">xk2</option> 
      <option value="three" selected>xk3</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}


01 require 'rubygems'
02 require 'mechanize'
03  
04 agent = WWW::Mechanize.new
05 agent.max_history = 1
06 agent.user_agent_alias = 'Windows IE 7'
07  
08 page = agent.get("http://www.iteye.com/login")
09 form = page.forms[0]
10 form.fields[0].value = "javaeye賬號"
11 form.fields[1].value = "javaeye密碼"
12      
13 agent.submit form #登陸JavaEye
14  
15 page = agent.get("http://qichunren.iteye.com/admin/messages/new") # 這裏的域名改爲你我的的
16 form =  page.forms[0]
17 form.fields[0].value = "qichunren" # 消息接收者
18 form.fields[1].value = "測試消息" #標題
19 form.fields[4].value = %Q{
20 我表明火星全人類歡迎你加入火星圈子!
21 地址是http://mars.group.iteye.com/ 點擊申請加入.
22 火星口號:火星新聞,火星笑話,火星文, 只要你的想法夠火星 地球很危險 JE很嚴肅 你們仍是回火星去吧
23 }
24  
25 5.times{agent.submit form} # 把這個數字寫成 1000 也是能夠的,*_*
相關文章
相關標籤/搜索