ruby - 使用Selenium-driver的描述中提到的代码可以在 Mechanize 中实现吗?

标签 ruby mechanize ruby-1.9.3

任何人都可以通过提供一些小技巧来帮助我,提到如何在 Mechanize 中编写以下内容?我对 Gem 完全陌生 Mechanize .

require "rubygems"
require "selenium-webdriver"

driver = Selenium::WebDriver.for :firefox
driver.get "https://www.example.com/"

element = driver.find_element :name => "username"
element.send_keys "#####"
element = driver.find_element :name => "password"
element.send_keys "******"
element.submit
element = driver.find_element(:name, "btnHome")
element.click
element=driver.find_element(:link, "Empdetals")
#print element.attribute(:href)
element.click
element = driver.find_element :name => "search.empdirectory"
element.send_keys "#######"
element = driver.find_element :name => "btnSearch"
element.click
driver.current_url

错误 当我尝试@Prakash 提供的“mechanzie”版本时
D:\Ruby script>ruby gmail.rb
C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.8/lib/net/http/persist
ent/ssl_reuse.rb:70:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 rea
d server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.8/lib/net
/http/persistent/ssl_reuse.rb:70:in `block in connect'
        from C:/Ruby193/lib/ruby/1.9.1/timeout.rb:54:in `timeout'
        from C:/Ruby193/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.8/lib/net
/http/persistent/ssl_reuse.rb:70:in `connect'
        from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
        from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:750:in `start'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.8/lib/net
/http/persistent.rb:628:in `start'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.8/lib/net
/http/persistent.rb:570:in `connection_for'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.8/lib/net
/http/persistent.rb:926:in `request'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/mechanize-2.5.1/lib/mechanize/h
ttp/agent.rb:258:in `fetch'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/mechanize-2.5.1/lib/mechanize.r
b:407:in `get'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/mechanize-2.5.1/lib/mechanize.r
b:306:in `click'
        from gmail.rb:6:in `block in <main>'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/mechanize-2.5.1/lib/mechanize.r
b:409:in `get'
        from gmail.rb:4:in `<main>'

D:\Ruby script>

最佳答案

是的, mechanize gem可用于自动化与网站的任何交互,包括通过提交用户名/密码和点击提交按钮/链接等登录网站。

不像 selenium-webdriver直接调用浏览器,mechanize本身充当浏览器。

结帐 EXAMPLES page on mechanize documentation学习如何mechanize可以使用。第二个例子 - 使用 RubyForge - 展示了如何登录站点并使用结果页面。

快速概览如何使用 mechanize退房 RailsCasts episode on mechanize

这是从 http://www.google.com 开始的示例代码,点击“Gmail”文本,登录 Gmail,然后列出页面中的链接:

require 'mechanize'

a = Mechanize.new
a.get('http://www.google.com') do |page|
  # Click the Gmail link
  gmail_login_page = a.click(page.link_with(:text => "Gmail"))

  # Submit the login form
  gmail_page = gmail_login_page.form_with( :action => 'https://accounts.google.com/ServiceLoginAuth' ) do |f|
    f.Email  = "<username>@gmail.com"
    f.Passwd = "**********"
  end.click_button

  # List all the links in the personal gmail page
  gmail_page.links.each do |link|
    text = link.text.strip
    next unless text.length > 0
    puts text
  end
end

希望它有助于开始使用 Mechanize并进一步探索!

关于ruby - 使用Selenium-driver的描述中提到的代码可以在 Mechanize 中实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14441262/

相关文章:

arrays - 检查数组是否包含实例变量 Ruby 具有特定值的实例

ruby-on-rails - RubyOnRails 启动服务器运行时报错

java - 使用 Requests Python 库形成令人讨厌的 POST 请求

rvm - 在ubuntu上使用rvm安装ruby 1.9.3

ruby 混合和继承注入(inject)

ruby - 为什么我可以将子数组传递给 `Array#each` ?

javascript - 使用python mechanize登录带有javascript md5哈希函数的网页

ruby-on-rails - 如何挽救 "sub"错误?

ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组?

c++ - 编译 Ruby C++ 扩展