我正在努力向表单添加字段,因为Mechanize不会检测字段。 我有3个表格,我设法选择了正确的表格。
输入p site.forms
会显示以下内容:
=> [#<Mechanize::Form
{name "userloginform"}
{method "POST"}
{action "/user?destination="}
{fields
[text:0xc01f34 type: text name: name value: ]
[field:0xc01cf0 type: password name: pass value: ]
[hidden:0xc01ad4 type: hidden name: url value: en/Results+Statistics]
[hidden:0xc01930 type: hidden name: form_id value: user_login]}
{radiobuttons}
{checkboxes}
{file_uploads}
{buttons [submit:0xc017c8 type: submit name: op value: Login]}>
, #<Mechanize::Form
{name "searchFromBlock"}
{method "GET"}
{action ""}
{fields
[text:0xc04964 type: text name: queryString value: Search]
[hidden:0xc044b4 type: hidden name: num value: 10]
[hidden:0xc09f68 type: hidden name: pagenum value: 1]
[hidden:0xc09ce8 type: hidden name: start value: 1]
[hidden:0xc09ae0 type: hidden name: lang value: en]
[hidden:0xc097e8 type: hidden name: content value: all]}
{radiobuttons}
{checkboxes}
{file_uploads}
{buttons [submit:0xc046f8 type: submit name: search value: ]}>
, #<Mechanize::Form
{name nil}
{method "GET"}
{action ""}
**{fields}**
{radiobuttons}
{checkboxes}
{file_uploads}
{buttons}>}>
]
我选择了最后一个表格(这是我的目标):form = site.form[2]
问题是这个表单根据Mechanize不包含任何字段,但实际上它确实包含另外3个字段。我想操纵这些,但在我能做到之前,我需要将字段添加到表单对象。
这样一个领域的一个例子是:
<select id="season" class="w_label_resul fonts12" style="display: none" size="7">
<option title="1949" value="1949"> … </option>
<option title="1950" value="1950"> …</option>
<option title="1951" value="1951"> … </option>
<option title="2012" value="2012"> … </option>
<option title="2013" value="2013"> … </option>
<option class="selected" selected="" title="2014" value="2014"> … </option>
</select>
如您所见,它没有“名称”,因此我无法将add_field!
方法用于Mechanize::form
,
因为它将field_name
作为第一个参数,而不存在。
意味着Nokogiri没有正确解析它?
有没有其他方法可以手动添加字段,还是我忽略了某些内容?
答案 0 :(得分:0)
我发现该网页是由javascript生成的。 这可能是表格不起作用的原因。
通过阅读java代码,我发现了如何通过您选择的选项构建weblink。使用Nokogiri迭代这些选项,构建链接并下载html源代码,我能够导航到我想要的地方。