【发布时间】:2014-04-04 10:49:52
【问题描述】:
我是机械化新手,也不是最高级的 python 用户,但我想自动化一个我想给网页输入的任务。现在的问题是,“提交”按钮没有分配给它的控件名称。因此,我进行了一些研究,并找到了一种为相关表单设置值的方法。但要做到这一点,我必须访问我要为其赋值的特定表单。所以我的代码如下所示:
forms = [f for f in br.forms()]
print forms[0].controls[0].name
我只是想我可以通过写forms[x] 来访问该表单,然后是:
forms[x].set_value("VALUE",
nr=5)
我得到的错误是:
forms[54].set_value("VALUE",nr=100)
IndexError: list index out of range
这可能是一个有点愚蠢的问题,可能是因为我并不真正了解我正在使用的功能,但由于没有真正的纪录片,我非常感谢这里的一句帮助。
PS:我可以使用打印所有表格
for f in br.forms():
print f
带输出:
<CheckboxControl(lookup=[yes])>
<TextControl(fld=NoName)>
<TextControl(pixemail=)>
<IgnoreControl(<None>=<None>)>
<TextControl(ra=00 00 00.0)>
<TextControl(dec=00 00 00.0)>
<SelectControl(equinox=[*J2000.0, B1950.0])>
<TextControl(offra=0.0)>
<TextControl(offdec=0.0)>
<TextControl(epoch=2000.0)>
<SubmitControl(<None>= Retrieve Data ) (readonly)>
<RadioControl(cextract=[*rect, circle])>
<TextControl(rawid=10.0)>
<TextControl(decwid=10.0)>
<SelectControl(wunits=[Degrees, *Minutes, Seconds])>
<TextControl(cirrad=10.0)>
<SelectControl(cat=[UCAC 2, UCAC 3, NOMAD, *USNO B1.0, USNO A2.0, ACT])>
<SelectControl(surims=[None, *All Surveys, POSS-I (103aO, 103aE), POSS-II (IIIaJ, IIIaF, IV-N), SOUTH, AAO-R, POSS-IO, POSS-IE, POSS-IIJ, POSS-IIF, POSS-IIN, SRC-J, SERC-EJ, ESO-R, SERC-ER])>
<CheckboxControl(getcat=[*yes])>
<CheckboxControl(getfin=[*yes])>
<CheckboxControl(pixflg=[yes])>
<CheckboxControl(colbits=[All, *cb_id, *cb_altid, *cb_ra, *cb_sigra, cb_mep, *cb_mura, cb_muprob, *cb_smura, cb_sfitra, *cb_fitpts, cb_err, *cb_flg, *cb_mag, cb_smag, *cb_mflg, *cb_fldid, *cb_sg, cb_xres, cb_pltidx, *cb_xi, *cb_dstctr, *cb_gall])>
<RadioControl(skey=[*ra, dec, sigra, sigdec, mep, mura, mudec, muprob, smura, smudec, sfitra, sfitdec, fitpts, err, flg, mag, smag, mflg, fldid, sg, xres, yres, pltidx, clr, sigpos, mutot, sigmu, xi, eta, dstctr, gall, galb])>
<SelectControl(slf=[*hh/dd mm ss, hh/dd:mm:ss, hh.hhh/dd.ddd, ddd.ddd/dd.ddd])>
<TextControl(minnpts=0)>
<TextControl(maxnpts=10)>
<SelectControl(clr=[B1, R1, B2, *R2, I2, B, V, R, J, H, K])>
<TextControl(bri=0)>
<TextControl(fai=100)>
<SelectControl(clr0m1A=[B1, R1, *B2, R2, I2, B, V, R, J, H, K])>
<SelectControl(clr0m1B=[B1, R1, B2, *R2, I2, B, V, R, J, H, K])>
<TextControl(bmrmin=-100)>
<TextControl(bmrmax=100)>
<TextControl(minposnerr=0.0)>
<TextControl(maxposnerr=10000.0)>
<TextControl(mumin=0.0)>
<TextControl(mumax=10000.0)>
<TextControl(minmuerr=0.0)>
<TextControl(maxmuerr=10000.0)>
<TextControl(minsep=0.0)>
<HiddenControl(minmagerr=0.0) (readonly)>
<HiddenControl(maxmagerr=1.0) (readonly)>
<SelectControl(opstars=[Yes, *No])>
<SelectControl(whorbl=[Light Stars/Dark Sky, *Dark Stars/Light Sky])>
<SelectControl(pixgraph=[Progressive JPEG, *JPEG, GIF, PDF, Large JPEG (1 Survey Only), Large GIF (1 Survey Only), PS (1 Survey Only)])>
<SelectControl(pixfits=[Yes, *No])>
<SelectControl(ori=[NE - North Up, East Right, *NW - North Up, East Left, SE - North Down, East Right, SW - North Down, East Left, EN - East Up, North Right, ES - East Up, North Left, WN - East Down, North Right, WS - East Down, North Left])>
<SelectControl(tck=[N and E marks, *Tick Marks, Grid Lines])>
<SelectControl(starlbl=[Yes, *No])>
<SelectControl(cmrk=[*None, 5.0 sec Box, 10.0 sec Box, 30.0 sec Box, 1.0 min Box, 2.0 min Box, 5.0 min Box, 10.0 min Box, 5.0 sec Circle, 10.0 sec Circle, 30.0 sec Circle, 1.0 min Circle, 2.0 min Circle, 5.0 min Circle, 10.0 min Circle])>
<TextControl(aobj=none)>
<SelectControl(pcl=[*P - Points, L - Points + Labels, C - Connected Points, A - Connected Points + Labels])>
<TextareaControl(atbl= )>
<IgnoreControl(<None>=<None>)>
<SubmitControl(<None>= Retrieve Data ) (readonly)>
<SelectControl(gzf=[*Yes, No])>
<SelectControl(cftype=[*ASCII, XML/VO])>>
我想上手的是<SubmitControl(<None>=Retrieve Data ) (readonly)>,从下往上数第三个。
【问题讨论】:
-
您不需要按钮来提交表单。这会解决您的问题还是您真的需要设置该值?
-
不计算所有表格,有没有可能根本就没有 54 个?您不能通过索引
lst[len(lst)] = item来添加到列表,您需要lst.append(item)。 -
它也不适用于 form[1]...
-
@Hal: 不,我只需要提交一个表格...有没有简单的方法?