使用mechanize勾选复选框

时间:2011-09-29 23:14:39

标签: javascript html perl mechanize

我在这个网站上有以下html文章: http://catalogue.bl.uk/F/NTBK6NCP3LK56BPNU2NJ4FF4MBLIRUNMFX66JLHKBDV1RNCAAB-02920?func=short-0&set_number=151530

<form name="XXX000001" method="GET"><input type="checkbox" name="ckbox"   onclick="javascript:select_record(this.form);" onkeypressed="javascript:select_record(this.form);"></form>

我想知道我是否可以使用机械化来勾选复选框?似乎这些框不是使用普通的html形成的。我不知道javascript

3 个答案:

答案 0 :(得分:2)

我假设您正在讨论使用Mechanize将信息提交回页面,就像人类使用浏览器勾选复选框一样。最简单的方法是首先使用WireShark来观察实际使用Web浏览器提交表单时所发生的一切(选中复选框),然后在使用Perl提交表单时模仿相同的行为。

答案 1 :(得分:2)

也许您应该检查WWW::Selenium以处理JavaScript网页。

WWW::Selenium是一种用于浏览器的远程控制。 从文档: Selenium远程控制(SRC)是一个测试工具,允许您使用任何主流的JavaScript启用浏览器,针对任何HTTP网站以任何编程语言编写自动Web应用程序UI测试。 SRC提供了一个Selenium Server,它可以自动启动/停止/控制任何支持的浏览器。它的工作原理是使用Selenium Core,这是一个纯HTML + JS库,可以在JavaScript中执行自动化任务; Selenium Server使用AJAX(XmlHttpRequest)直接与浏览器通信。

下载并安装Selenium服务器(Java apllication)后,您可以使用模块WWW::Seletion来控制将使用浏览器与启用JavaScript的网站进行交互的服务器。

使用类WWW::Selenium

的实例
my $sel = WWW::Selenium->new(
    host => "localhost",
    port => 4444,
    browser => "*iexplore",
    browser_url => "http://www.google.com",
);

几乎与网站的每种互动都成为可能。必须定义定位器以精确定位页面中的元素,以便发出命令(选择,单击,...)。

您可以在模块文档中找到详细的帮助。

答案 2 :(得分:1)

因为WWW :: Mechanize不会说javascript,你需要按照建议去做,弄清楚javascript的作用并绕过它,或者你可以使用WWW::Mechanize::Firefox这样的东西来控制一个浏览器。