代码之家  ›  专栏  ›  技术社区  ›  James Finnegan

使用Mechanize发布没有名称的表单

  •  0
  • James Finnegan  · 技术社区  · 6 年前

    我在拉一个网页,里面有球员的数据。这一页是几页中的第1页。还有一个下拉列表,允许一次查看30多个玩家,允许500个,这样我就可以在一个页面上看到所有玩家。我不知道如何用所有500名玩家来拉页面,所以我拉主页,然后有一个页面大小为500的表单可以发布。问题是表单没有名字,只有id。当我试图用“id=form1”发布表单时,它会说它不存在。我做了一个数据转储程序,下面是帖子。我会使用wget或curl,但它不允许我拉取PageSize=500的文件,因为它只默认为30。另一个问题是get对象和post对象。我需要创建一个饼干罐,还是由代理_别名来处理。

    $VAR1 = bless( {
                     'default_charset' => 'UTF-8',
                     'enctype' => 'application/x-www-form-urlencoded',
                     'accept_charset' => 'UNKNOWN',
                     'action' => bless( do{\(my $o = 'https://www.fangraphs.com/projections.aspx?pos=all&stats=bat&type=steamer&team=0&lg=all&players=0&PageSize=500')}, 'URI::https' ),
                     'method' => 'POST',
                     'attr' => {
                                 'id' => 'form1',
                                 'method' => 'post'
                               },
                     'inputs' => [
                                   bless( {
                                            'readonly' => 1,
                                            '/' => '/',
                                            'value_name' => '',
                                            'value' => '',
                                            'name' => 'RadScriptManager1_TSM',
                                            'id' => 'RadScriptManager1_TSM',
                                            'type' => 'hidden'
                                          }, 'HTML::Form::TextInput' ),
                                   bless( {
                                            'readonly' => 1,
                                            '/' => '/',
                                            'value_name' => '',
                                            'value' => '/wEPDwUJNTA2ODMzMzI3D2QWBAIBD2QWAgIBDxYCHgRUZXh0BegBPG1ldGEgbmFtZT0nZGVzY3JpcHRpb24nIGNvbnRlbnQ9J1N0ZWFtZXIgYmFzZWJhbGwgcHJvamVjdGlvbnMgZm9yIGJhdHRlcnMgYW5kIHRoZSAyMDIwIHNlYXNvbicgLz4NCjxtZXRhIG5hbWU9J2tleXdvcmRzJyBjb250ZW50PSdiYXNlYmFsbCBwcm9qZWN0aW9ucywgYmF0dGVyIHByb2plY3Rpb25zLCBzdGVhbWVyI
    

    这里还列出了其他一些输入,但不确定我是否需要这些输入。如果需要的话,我可以把整件事发出去。下面是我正在运行的一小段代码。

    my $mech = WWW::Mechanize->new();
    $mech->agent_alias('Linux Mozilla');
    my $url = "https://www.fangraphs.com/projections.aspx?pos=all&stats=bat&type=steamer&team=0&lg=all&players=0&PageSize=500";
    $mech->get($url);
    $mech->submit_form(
        id => 'form1',
    );
    
    
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   AnFi onet.eu    6 年前

    使用 form_id 参数输入 submit_form 打电话(而不是 错误的 id ).

    $mech->submit_form(
      form_id => 'form1',
    );
    

    man WWW::Mechanize

    机械->提交表格(…)
    …
    “表单id=>id”
    选择ID为的表单(调用“form_ID()”)

        2
  •  0
  •   choroba    6 年前

    参数的名称是 form_id 不只是 id .