我正在开发一个webbot,我遇到了这个奇怪的页面,其中多个变量具有相同的名称,但Firefox Web控制台显示的值不同。我不确定如何在python中复制这种行为。目前,我正在使用请求库来发布请求,并且接收名称和值对的字典。当然,词典有独特的键。所以我想知道是否有人能告诉我如何使用多个带有相同名称的变量发送帖子请求。
sel_subj:dummy
sel_subj:ECE
谢谢, 拉吉夫
编辑:这是导致此
的html源代码<input type="hidden" value="dummy" name="rsts"></input>
<input type="hidden" value="dummy" name="crn"></input><br></br>
<input type="hidden" value="120138" name="term_in"></input>
**<input type="hidden" value="dummy" name="sel_subj"></input>**
<input type="hidden" value="dummy" name="sel_day"></input>
<input type="hidden" value="dummy" name="sel_schd"></input>
<input type="hidden" value="dummy" name="sel_insm"></input>
<input type="hidden" value="dummy" name="sel_camp"></input>
<input type="hidden" value="dummy" name="sel_levl"></input>
<input type="hidden" value="dummy" name="sel_sess"></input>
<input type="hidden" value="dummy" name="sel_instr"></input>
<input type="hidden" value="dummy" name="sel_ptrm"></input>
<input type="hidden" value="dummy" name="sel_attr"></input>
<table class="dataentrytable" summary="Table is used to present the course search criteria">
<tbody>
<tr>
<td class="delabel" scope="row"> … </td>
<td class="dedefault" colspan="37">
**<select id="subj_id" multiple="" size="10" name="sel_subj"> …
</select>**
</td>
</tr>
</tbody>
</table>
注意select标签和突出显示的输入标签是如何具有相同名称的。
答案 0 :(得分:1)
我所知道的唯一方法是使用附加[]的变量名。
<input type="hidden" value="dummy" name="sel_subj[]"></input>
<input type="hidden" value="ECE" name="sel_subj[]"></input>
这会导致数组放在$_POST['sel_subj']
中,$_POST['sel_subj'][0]
为“虚拟”,$_POST['sel_subj']
为ECE。
现在我想起来了,我认为数组的创建是由附加[]附加的php-parser完成的。这表明即使名称末尾没有[],这两个值也都会通过POST发送。也许PHP可以配置为不要忽略这个值。
答案 1 :(得分:1)
对于GET变量(在url中),您可以拥有多个具有相同名称的值。您可以解析整个URL并读取并使用每个值。
如果将[]
添加到参数名称,PHP甚至会自动解决此问题。在这种情况下,它会自动将其更改为数组。但这也是一个伎俩。编写一段代码可以很容易地使用重复的名称执行相同的操作,而不需要[]
作为后缀。
同样也会在变量后发生。您可能需要更多代码才能正确阅读它们。
这种情况下的代码可能会检查sel_subj
是否包含dummy
以外的任何值。如果是这种情况,则使用该值。如果它不存在,sel_subj
可能仍然存在值dummy
。这可能表示脚本已发布表单,但未选择任何值。
实际上,我认为很容易解释这个脚本是如何工作的,甚至可能是为什么,但我不认为这是一个非常好的解决方案,将所有默认值都放在隐藏字段中,所以我建议你不要不要试图复制这个解决方案。 : - )