【问题标题】:How to automate a browsing task?如何自动化浏览任务?
【发布时间】:2012-07-16 22:08:57
【问题描述】:

几周以来,我一直在尝试自动执行浏览任务。 任务很简单:登录,点击链接,输入变量并提交,退出。 我需要创建一个执行此操作的网站(某种更简单的界面) 请记住该网站正在使用 Servlet,并且我无权访问网站代码。 起初我尝试了 CURL,但由于页面中有一些 Ajax 元素,因此 curl 无法显示该内容。 我尝试了 .NET Webdriver、JUnit、Selenium 等。但在渲染 ajax 元素时都失败了。 我尝试过 perl 和 python mechanize,虽然 perl 不起作用,但我能够使用 python 获取动态内容。 问题不在于我有以 Javascript 开头的 Javascript 执行链接:而且我认为我不能使用 Mechanize 调用函数。 有人知道这项任务是否可行吗?

【问题讨论】:

  • 您是否尝试使用 selenium waitFors 让 Ajax 发挥出色?它究竟是如何“失败”的?
  • Selenium 登录失败。我使用了 selenium 的 .NET 包装器,但无法通过登录屏幕。我收到“您必须输入密码”错误。 (是的,表单字段的名称是正确的)
  • Mechanize FAQ 包含针对缺乏 Javascript 支持的解决方法,并列出了许多确实支持 Javascript 的模块。
  • 我都试过了,都失败了。

标签: php python perl curl selenium


【解决方案1】:

Perl 模块WWW::Mechanize 是自动化网络浏览任务的最流行方式,例如下载、上传、表单提交、身份验证、简单浏览、屏幕抓取等。

如果网站包含 Javascript,处理它们的流行 Perl 模块是使用WWW::Mechanize::Firefox

到目前为止,“几乎”任何类型的网站,包括 JavaScript 和 Ajax 等技术以及使用 SSL 安全性和/或通过代理服务器访问,都可以通过属于 LWP::UserAgentWWW::Mechanize 的 Perl 模块方法的组合来处理或WWW::Mechanize::Firefox。网络上提供了大量示例。

【讨论】:

  • 我理解它的方式 WWW::Mechanize::Firefox 需要 MozlRepl,它是一个 firefox 扩展,与我的命令行环境无关。
  • 你用的是什么“命令行环境”?您也可以使用 WWW::Scripter 来处理 javascript。
  • 谢谢 Annjawn,只是 linux,问题是我正在尝试创建一个网站,该网站需要一个凭据并运行一个脚本来自动执行一些任务,因此所有任务都应该在脚本中完成,我也会看看 Scripter。但我有点得出结论,尽管每个人都这么说,但如果可能的话,使用脚本处理复杂的网站是极其困难的并且依赖于模块。
  • 是的,这是真的。在网页中创建动态对象有多种方法,每种方法都有自己的属性,使用标准模块处理所有这些类型是很困难的。您可以查看许多其他模块,但几乎所有模块都需要网络浏览器插件。
【解决方案2】:

一个使用 casperjs 的例子:

var casper = require('casper').create({
   verbose: true,
   logLevel: 'debug'
});
casper.start(
   'http://example.com',
   function() {
       this.evaluate( function() {
           return $('#someElementId div').length; // This runs as if it was on the page
       });
       this.fill(
           '#formId',
           {
               email: 'username@example.com',
               password: 'password123'
           },
           true
       ); // This submits login form
   }
);

Casperjs 存储 cookie,因此对更深页面的请求不会失败。

有关提交表单的详细信息,请参阅fill()。

请参阅evaluate() 以运行 js,就好像它在您正在测试的页面上执行一样。

如果您想测试 AJAX 操作 - 没问题。它们将像页面在浏览器中运行一样运行,您可以在 DOM 中看到结果。您可以使用 evaluate() 手动启动它们。

【讨论】:

  • OOOO 一堆随机链接! - 任何更多信息都会有所帮助。
  • Selenium WebDriver 在 Ajax 元素上失败。
  • 另外,您确定我可以使用 Phantom 运行服务器端 javascript 吗?
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 2013-09-23
相关资源
最近更新 更多