忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 2363 | 回复: 10

对一个form用post提交数据,如何设置submit? [复制链接]

论坛徽章:
0
发表于 2017-05-30 23:03 |显示全部楼层
以下代码来自《Perl & LWP》76页,由于该书出版于2002年后,一直没有再版,
代码中要提交的网页http://dogbert.abebooks.com/abe/BookSearch'  已经变为
'’https://www.abebooks.com/servlet/SearchEntry?errorcode=1',而其中Form数据项也变了。
最主要的是原来是用一个多值Button提交数据,现在确实一个无值Submit,
我这方面是菜鸟,就不知如何处理了。

现在的网页源码:
<BUTTON tabindex="25" class="btn btn-abebooks btn-xs-block"
id="search-button" type="submit">Find Book</BUTTON>

所以 原来的  "bu" => "Start Search",必须修改,请教如何修改?



  1. #!/usr/bin/perl -w
  2. # seraph.pl - search for Codex Seraphinianus on abebooks

  3. use strict;
  4. my $out_file = "result_seraph.html";  # where to save it

  5. use LWP;
  6. my $browser = LWP::UserAgent->new;
  7. my $response = $browser->post(
  8.   'https://www.abebooks.com/servlet/SearchEntry?errorcode=1',#原来:http://dogbert.abebooks.com/abe/BookSearch',
  9.    # That's the URL that the real form submits to.
  10.   [
  11.     #"ph" => "2",
  12.     "an" => "",
  13.     "tn" => "Codex Seraphinianus",#标题
  14.     "pn" => "",
  15.     "sn" => "", #书号
  16.     #"gpnm" => "All Book Stores",
  17.     #"cty" => "All Countries",
  18.     "bi" => "Any Binding",#绑定包装
  19.     "prl" => "",#最低价格
  20.     "prh" => "",
  21.     "sortby" => "0",#排序方式
  22.     #"ds" => "100",
  23.     #"bu" => "Find Book", #这个无效了,那么如何修改,才能提交?????
  24.   ]
  25. );

  26. die "Error: ", $response->status_line, "\n"
  27. unless $response->is_success;

  28. open(OUT, ">$out_file") || die "Can't write-open $out_file: $!";
  29. binmode(OUT);
  30. print OUT $response->content;
  31. close(OUT);
  32. print "Bytes saved: ", -s $out_file, " in $out_file\n";
复制代码

论坛徽章:
0
发表于 2017-06-04 18:29 |显示全部楼层
如果是出于实用角度的话,现在没必要用直接LWP来做这种表单提交。可以用WWW::Mechanize或者WWW::Mechanize:hantomJS。(后者能运行页面js)

比如,


  1. use WWW::Mechanize::PhantomJS;
  2. my $mech = WWW::Mechanize::PhantomJS->new();

  3. $mech->get('https://www.abebooks.com/servlet/SearchEntry');
  4. $mech->submit_form(
  5.     with_fields => {
  6.         tn => q{"programming perl"}
  7.     }   
  8. );
  9. say $mech->content;
复制代码



如果出于学习研究LWP角度的话,可以先用Chrome的debug模式看一下手工操作时post的是什么数据,再去调整脚本代码。

评分

参与人数 1信誉积分 +10 收起 理由
hztj2005 + 10 赞一个!

查看全部评分

论坛徽章:
0
发表于 2017-06-04 18:31 |显示全部楼层
本帖最后由 zhouzhen1 于 2017-06-15 22:05 编辑

重复发帖,已删

论坛徽章:
0
发表于 2017-06-04 18:32 |显示全部楼层
本帖最后由 zhouzhen1 于 2017-06-15 22:06 编辑

重复发帖,已删

论坛徽章:
0
发表于 2017-06-04 18:33 |显示全部楼层
本帖最后由 zhouzhen1 于 2017-06-15 22:06 编辑

重复发帖,已删

论坛徽章:
0
发表于 2017-06-04 18:33 |显示全部楼层
本帖最后由 zhouzhen1 于 2017-06-15 22:07 编辑

重复发帖,已删

论坛徽章:
0
发表于 2017-06-04 18:35 |显示全部楼层
本帖最后由 zhouzhen1 于 2017-06-15 22:06 编辑

重复发帖,已删

论坛徽章:
0
发表于 2017-06-05 23:12 |显示全部楼层
话说自己能把自己发的楼删掉吗?昨天论坛抽风,发了几次都以为发不出去,结果却是发了好几遍。。。

论坛徽章:
0
发表于 2017-06-07 22:19 |显示全部楼层
回复 8# zhouzhen1
不能整楼删除,但可把主要内容删掉,写上“电脑出错,重复发帖。”



论坛徽章:
0
发表于 2017-07-04 14:39 |显示全部楼层
本帖最后由 dalian_gq 于 2017-07-04 14:43 编辑

回复 2# zhouzhen1

出错了,为什么?
E:\Perl\sd-1>perl ttt.pl
'phantomjs' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
Selenium server did not return proper status at C:/Perl64/site/lib/Selenium/Remote/Driver.pm line 397.

运行到这句就出错。  my $mech = WWW::Mechanize:hantomJS->new();

我的环境

E:\Perl\sd-1>perl -v

This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x64-multi-thread
(with 1 registered patch, see perl -V for more detail)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP