基本上,想寫一支自動填表的程式,要做的事有:
- 了解用法
- 分析網站
import urllib2 import cookielib from urllib import urlencode
上面是大致上會用到的 library。
假設今天你想要 登入 一個網站,自動填完裡面的問卷,使用Browser的開發者工具去檢查元素,發現登入的Block長這樣。
<form method="POST" action="login.php"> <input type="text" name="username" /> <input type="password" name="password" /> </form>
此時,你得到了一些資訊:
- path = login.php
- method = POST
- 帳號的 name = username
- 密碼的 name = password
#set cookie cookie = urllib2.HTTPCookieProcessor(cookielib.CookieJar()) opener = urllib2.build_opener(cookie, urllib2.HTTPHandler)
POST的Data,以字典的形式來表示。然後先以 opener 來 Send Request,然後得到 cookie ,最後將其 install 在 urllib2 裡。
login_url = 'http://www.yourdomain.com/login/php' login_data = {'username': 'root', 'password': 'root'} opener.open(login_url, urlencode(login_data)) urllib2.install_opener(opener)
最重要的部分就在於,將登入後得到的 cookie 牢牢的鎖在 urllib2 裡。
得到 cookie 後,我們要開始填寫問卷。
分析─透過 chrome 的檢查元素,可是查看 Network 也就是封包傳遞的情況,便可手動分析到每一次問卷 POST 出去究竟是 POST 了甚麼資料。
再度假設,問卷的位置為 /form.php ,分析到的 form-data 為:
- __VIEW: qwerty12345
- first: 5
- second: 7
- third: 9
- button: OK
那當然你POST出去的東西也要有這 5 個,建立字典!其中「__VIEW」很明顯是一種 hidden 的 input ,而你必須自己從 source code 中爬出來。
post_url = 'http://www.yourdomain.com/form.php' post_data = {'__VIEW': find, 'first': value1, 'second': value2, 'third': value3, 'button': 'OK'} request = urllib2.Request(post_url , urlencode(post_data)) result = urllib2.urlopen(request )
這樣便可完成簡單的表單填寫!
沒有留言:
張貼留言