我正在尝试使用twill为页面编写一个爬虫,它需要我登录。我可以填写表格。但twill的submit()函数似乎没有“点击”按钮。
Form name=fSSUser_Logon (#1)
## ## __Name__________________ __Type___ __ID________ __Value__________________
1 TFORM hidden TFORM SSUser.Logon
2 TPAGID hidden TPAGID SRLpKQyn1yc8
3 TEVENT hidden TEVENT
4 TXREFID hidden TXREFID 2
5 TOVERRIDE hidden TOVERRIDE
6 TDIRTY hidden TDIRTY 1
7 TWKFL hidden TWKFL
8 TWKFLI hidden TWKFLI
9 TFRAME hidden TFRAME
10 TWKFLL hidden TWKFLL
11 TWKFLJ hidden TWKFLJ
12 TREPORT hidden TREPORT
13 TRELOADCMP hidden TRELOADCMP
14 TRELOADID hidden TRELOADID SRLpKQy1nyc7
15 TOVERLAY hidden TOVERLAY
16 RELOGON hidden RELOGON
17 USERNAME text USERNAME
18 PASSWORD password PASSWORD
19 Logon button Logon Logon
上面的页面上的showforms()。
该按钮的实际代码如下:
<input type="button" class="clsButton" id="Logon" name="Logon" tabindex="3" value="Logon" title="Logon">
它没有我可以使用的任何形式。
到目前为止我的代码:
from twill.commands import *
from twill import get_browser
go("https://trakcarelabwebview.nhls.ac.za/trakcarelab/csp/logon.csp")
showforms()
fv("1", "USERNAME", "xx")
fv("1", "PASSWORD", "xx")
fv("1", "Logon", "Logon")
formaction('Logon','https://trakcarelabwebview.nhls.ac.za/trakcarelab/csp/logon.csp#TRAK_main')
submit()
show()
showforms()
框架“TRAK_main”是我需要的HTML框架。 最后的showforms()显示与“login”之前完全相同的形式。
我在这里做错了什么?
答案 0 :(得分:0)
我在这里做错了什么?
你的答案就在这里:
twill不懂javascript。
当browser
加载该页面时,页面上的js会执行,而js会将一个onclick事件处理程序分配给Logon按钮。然后,当单击“登录”按钮时,事件处理函数将为其中一个隐藏的表单字段设置值。服务器检查请求中的该值,如果该值不存在,则登录失败,服务器重定向回登录页面。
由于twill
不理解js,隐藏表单字段的值永远不会被设置,因此当twill向服务器发送请求时,请求中缺少隐藏表单字段的值。
网站会尝试各种技巧来阻止程序访问其网页。