與網頁交互(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 也是能夠的,*_* |