【问题标题】:Why doesn't my WWW::Mechanize submit a PayPal form work?为什么我的 WWW::Mechanize 无法提交 PayPal 表单?
【发布时间】:2010-09-29 13:20:50
【问题描述】:

我尝试过的任何方法都无法让我的代码正确提交。其他人可以解决这个问题吗?

#!/usr/bin/perl

use WWW::Mechanize;


my $user = 'cowsaremyfriends@gmail.com';
my $pass  = 'hackswipe';
# Test account; don't worry


my $browser = WWW::Mechanize->new();
$browser->get("https://www.paypal.com/");
$browser->form_with_fields("login_email", "login_password");
$browser->field("login_email", $user);
$browser->field("login_password", $pass);
$browser->submit_form();
$browser->get("https://www.paypal.com/us/cgi-bin/webscr?cmd=_profile-api-add-direct-access");
##### Help here ---> Trying to submit form with default option selected #####
my $html = $browser->content;

print $html;

【问题讨论】:

  • 您的代码对我有用。你有什么问题?
  • 有没有机会,IP被列入黑名单/禁止?
  • 正在发生什么,与您预期会发生什么?您没有明确说明您遇到的实际问题。
  • 问题是,一旦我进入评论之前的页面,我就不知如何提交该表单。我尝试代替该评论的各种方法都失败了。已经存在的代码可以工作,是的,但是我在编写更多工作代码时遇到了麻烦。谢谢。

标签: perl forms paypal www-mechanize


【解决方案1】:

它对我有用,但是当涉及到调试网络爬虫等时,你应该注意 HTTP 事务。这很容易添加,因为 WWW::MechanizeLWP::UserAgent 子类:

use WWW::Mechanize;

my $browser = WWW::Mechanize->new();

# See LWP::Debug
$browser->add_handler("request_send",  sub { shift->dump; return });
$browser->add_handler("response_done", sub { shift->dump; return });

现在您可以查看您发送的内容以及 PayPal 发回的内容。

通常您还可以使用各种 HTTP 嗅探工具,但这些工具仅适用于您以明文形式发送的内容,因此您在这里运气不佳。

但是,在这种情况下,PayPal 由您负责。他们知道您正在使用脚本。我得到的部分输出是:

<h2>Request API Credentials</h2>
</div>
<div id="messageBox"></div>
<div id="main"><div class="layout1"><form action="https://www.paypal.com/us/cgi-bin/webscr?dispatch=5885d80a13c0db1f8e263663d3faee8dc18bca4c6f47e633b393e284a5f8a8f8" class="">
<input type="hidden" name="cmd" value="_profile-api-add-direct-access"><input type="hidden" name="api_flow_origin" value=""><input type="hidden" name="show_switch" value="1"><input type="hidden" name="auth_type" value="ssl"><input type="hidden" name="api_username" value=""><input type="hidden" name="program_name" value=""><input type="hidden" name="program_id" value=""><input type="hidden" name="partner_name" value=""><input type="hidden" name="partner_id" value=""><input type="hidden" name="partner_code" value=""><p>API credentials consist of three elements:</p>
<ul>
<li>An API username</li>
<li>An API password</li>
<li>Either an API signature or an API SSL client-side certificate</li>
</ul>
<p>If you’re using a shopping cart or solution provider, ask whether you need an API signature or a certificate.</p>

如果您想通过程序与 PayPal 进行交互,您需要sign up for developer access

【讨论】:

  • 问题是,一旦我到达评论之前的页面,我就迷失了如何提交该表单。我尝试代替该评论的各种方法都失败了。已经存在的代码可以工作,但是我在编写更多工作代码时遇到了麻烦。谢谢。
  • 好吧,你必须解释你想做什么。编辑您的原始问题,告诉我们您正在尝试做什么、您尝试了什么以及它是如何不起作用的。
  • 感谢您的帮助,我最终以完全不同的方式解决了这个问题。
【解决方案2】:

我们不知道到底是什么问题。您是否阅读了常见问题解答?

perldoc WWW::Mechanize::FAQ

它提供了有关如何调试 Mech 问题的建议。我要问的第一件事是表单是否使用 JavaScript。我敢打赌,PayPal 的页面正在这样做。

【讨论】:

  • 问题是,一旦我进入评论之前的页面,我就不知如何提交该表单。我尝试代替该评论的各种方法都失败了。谢谢。
猜你喜欢
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 2023-03-12
  • 2016-05-23
相关资源
最近更新 更多