31 Oct 2010

python模拟网页填表



更新:加入有结果发邮件函数,具体见:python发送邮件.
在等签证结果,很着急.我每天都要刷个无数遍,那个网页想自动化实现,需要填4组数据.
用python做自动化正合适.一般网页用httpFox看到post数据,然后伪装浏览器,
做header和data这2个字典就行,注意data要用urllib.urlencode()编码.
但是这个网页要求SSL链接,如何做安全SSL我还不会.只好搜索,找到了Selenium,
这个东西真的很强大,有点儿类似按键精灵之类,可以录制所有浏览器操作
包括填表数据,然后自动化生成java,c#,python,php...很多语言的原生代码
也有很多人推荐cPAMIE来模拟ie访问数据.
最后找到的解决办法是用win32com来模拟ie,可以分析documents的元素来模拟ie,
这个办法的好处是比较直观,容易理解,mark一下.
import win32com
import time
refnum = "签证reference号码"
strdate = "日期"
strmon = "月份"
stryear = "年份"
url = "https://www.vfs.org.in/UKG-PassportTracking-PPT/ApplicantTrackStatus.aspx?Data=eQhlWV1635htWhLZVVgaKw==〈=XlDVhFJC4oE="

ie = win32com.client.Dispatch("InternetExplorer.Application")
ie.Visible = 0
ie.Navigate(url)
state = ie.ReadyState
print "正在查询..."
while 1:
    state = ie.ReadyState
    if state==4:
        break
time.sleep(1)
print "查询成功!"
state = None
ie.Document.getElementByID("txtRefNO").value = refnum
ie.Document.getElementByID("txtDat").value = strdate
ie.Document.getElementByID("txtMont").value = strmon
ie.Document.getElementByID("txtYea").value = stryear
ie.Document.getElementByID("cmdSubmit").click()
while 1:
    state = ie.ReadyState
##    print state,
    if state==4 and str(ie.LocationURL)=="https://www.vfs.org.in/UKG-PassportTracking-PPT/ApplicantTrackStatus.aspx?Data=eQhlWV1635htWhLZVVgaKw%3d%3d〈=XlDVhFJC4oE%3d":
## 注释掉的这句可以显示整个网页的代码
##        print ie.Document.body.innerHTML 
        print ie.Document.getElementByID("lblScanStatus").innerHTML
        break
time.sleep(1)
另,如果你用pythonwin运行,可能会出现乱码,这时pythonwin的环境造成
需要的地方这样即可
u = u"你好"
print u.encode("utf8")

No comments :

Post a Comment