0

我正在编写一个脚本,该脚本使用客户端提供的表单条目在我的 Rails 应用程序中自动完成 Web 表单。然而,这个网站使用 Javascript,所以 Mechanize 是不可能的。

然而,我所读到的所有关于 Mechanize 的替代品——Watir Webdriver、Selenium、Capybara Webkit——似乎都只专注于测试。但是,我的 Rails Web 应用程序会接收用户的表单条目,然后使用这些工具之一将它们输入到另一个网站。例如,我需要上传一张图片(即:image)并将不同的文本(即:city)输入到作为此应用程序的一部分的表单字段中,这将获取条目并将它们输入到网站中。

所以我的第一个问题是:除了测试之外,我可以使用任何 Mechanize 替代品吗?第二:任何人都可以参考网络上的代码示例以了解上述任何自动机的非测试用法吗?

4

3 回答 3

1

我没有在非测试环境中使用启用 javascript 的替代方案的任何具体示例,但我确实有一个建议:如果您知道要将表单信息提交到的网站,最好找出javascript 正在做并模仿它。深入研究站点的 javascript 代码并找出将什么类型的数据提交到哪个 URL,然后使用标准 HTTP 操作来模仿——完全跳过 javascript 呈现/交互部分。

使用 javascript 呈现页面时会产生大量开销,这就是为什么这些工具(Watir、Selenium、Capybara 等)通常不用于实际的面向客户端的应用程序上下文中的原因。

于 2013-07-19T07:21:58.373 回答
0

您应该能够使用 watir-webdriver 从一个站点获取数据(图像、城市)并上传到另一个站点。以下是帮助您入门的简短代码示例。

require 'watir-webdriver'
$browser1 = Watir::Browser.new : chrome #You can use phantomjs for headless http://phantomjs.org/ 
$browser1.goto  http://website1.com
city_field = $browser1.text_field (:id => 'city')
city = city_field.value 
$browser2 = Watir::Browser.new : chrome 
$browser2.goto  http://website2.com
city_field_site2 = $browser2.text_field (:id => 'city')
city_field_site2.set city 
于 2013-07-20T15:59:31.193 回答
0

Watir 有一颗无头宝石。你可以试试watir headless

于 2013-07-19T07:50:33.187 回答