使用 Ruby 和 Mechanize 登录网站

2024-04-03

我需要从网站上抓取数据,但这需要我先登录。我一直在使用 hpricot 成功抓取其他网站,但我对使用 mechanize 还很陌生,而且我真的对如何使用它感到困惑。

我看到这个例子经常被引用:

require 'rubygems'
require 'mechanize'

a = Mechanize.new
a.get('http://rubyforge.org/') do |page|
  # Click the login link
  login_page = a.click(page.link_with(:text => /Log In/))

  # Submit the login form
  my_page = login_page.form_with(:action => '/account/login.php') do |f|
    f.form_loginname  = ARGV[0]
    f.form_pw         = ARGV[1]
  end.click_button

  my_page.links.each do |link|
    text = link.text.strip
    next unless text.length > 0
    puts text
  end
end

但我发现它非常神秘。我特别不明白的部分是这里发生的事情:

f.form_loginname  = ARGV[0]
f.form_pw         = ARGV[1]

页面中的那些输入标签怎么突然变成了方法?我在这里错过了什么吗?当我尝试重新创建它并登录到 AppDataPro (http://www.appdata.com/login) 时,我遇到了输入名称包含括号的问题,如下所示:

<Table> 
<tr><td width="150"> 
   <label for="user_session_username">Username</label><br /> 
</td><td > 
    <input id="user_session_username" name="user_session[username]" size="30" type="text" /> 
</td></tr> 
<tr><td> 
   <label for="user_session_password">Password</label><br /> 
</td><td> 
    <input id="user_session_password" name="user_session[password]" size="30" type="password" /> 
</td></tr> 
</table> 

这是我使用机械化的尝试:

    a = Mechanize.new
    a.get('http://www.appdata.com/login') do |page|
        # Click the login link
        login_page = a.click(page.link_with(:text => /Login/)) #login_page is basically a doc of appdata/login

        my_page = login_page.form_with(:action => '/login') do |f|
            f.user_session[username] =  '****username here?****'
            f.user_session[password] =  '****password here?****'
        end

    end

但这会导致错误,

logintest01.rb:21:in `block (2 levels) in <main>': undefined method `user_session' for nil:NilClass (NoMethodError)

我正在做的事情有什么问题吗?


这是我通常采取的方法。它没有让我失望:

username_field = form.field_with(:name => "user_session[username]")
username_field.value = "whatever_user"
password_field = form.field_with(:name => "user_session[password]")
password_field.value = "whatever_pwd"
form.submit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Ruby 和 Mechanize 登录网站 的相关文章

  • 在 Rails 控制台中创建实例时,Rails 4 强参数失败

    可能在这里做了一些愚蠢的事情 但这是我的基本千篇一律的课程 class League lt ActiveRecord Base private def league params params require full name permi
  • Twitter-Typeahead 不提供建议

    我正在尝试使用twitter typeahead rails 我的目的是当我在 Typeahead 输入框中键入内容时 通过下拉框建议模型 User 的实例 但是 当我打字时什么也没有发生 有人看到我的代码有什么问题吗 Gemfile ge
  • 使用试运行选项运行黄瓜时出错

    我试图通过仅打开和关闭浏览器一次来提高运行测试的速度 http watirmelon com 2012 04 01 Five page object anti patterns http watirmelon com 2012 04 01
  • 如何随机生成文件的链接?

    我有一个 PDF 文件 我不想通过我网站上的 URL 公开访问该文件 作为 轻微 安全层 我想通过电子邮件向用户发送一个唯一的 随机生成的 URL 他们可以从中下载 PDF 我将把该 PDF 存储在 AWS 或类似的地方 我感觉自己被困在r
  • Rails——自我与@

    我正在关注 Michael Hartl 的 RoR 教程 它涵盖了密码加密的基础知识 这是当前的用户模型 class User lt ActiveRecord Base attr accessor password attr accessi
  • 用于解析序列化 PHP 数组的 ruby​​ gem? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 savon v2 的 SOAP Web 服务 并在响应中获取一个我需要解析的序列化 PHP
  • 如何用另一个子字符串替换子字符串(按索引 from..to)

    如何用其他字符串将某个字符中的子字符串替换为另一个字符 first 4 last 11 replacement show me the money replace part first last replacement gt show mo
  • RMagick 安装无法构建本机扩展

    在 Mountain Lion 上 我尝试安装 RMagick 我找到了一个GitHub 上的问题 https github com mroth lolcommits issues 56解决方案应该是命令gem pristine rmagi
  • Asp net Core 获取用户Windows用户名

    在ASP net CORE mvc中构建内联网 我需要获取当前用户的Windows用户名进行登录 我不需要使用Windows身份验证自动登录用户 我已经有一个自定义登录控制器来做到这一点 我只需要他的用户名 它在本地工作正常 但在 IIS
  • 使用 Rails 自动登录?

    我正在尝试使用 Rails 的 Restful Authentication 插件建立一个简单的身份验证系统 我只是想知道它是如何工作的 b c 我似乎无法弄清楚 cookie 的要求是什么 以及如何做到这一点浏览器始终会记住您 6 个多月
  • ActiveSupport 如何计算月度总和?

    我很高兴也很惊讶地发现 ActiveSupport 按照我想要的方式进行月度汇总 无论相关月份中有多少天 添加1 month对特定的Time将使您在该月的同一天着陆Time gt Time utc 2012 2 1 gt Wed Feb 0
  • Bundler 似乎无法通过 Rbenv 找到正确的 Ruby

    多年来我一直使用 RVM 作为 Ruby 版本管理器 但由于其简单性 我想改用 rbenv 但是我在部署时发现了一些奇怪的问题 这似乎是错误的地方 env RBENV ROOT home deploy rbenv PATH home dep
  • Ruby—Open3.popen3 / 如何打印输出

    我有一个小红宝石脚本 它的作用是mysql导入方式 mysql u
  • 为什么 $_SERVER["PHP_AUTH_USER"] 和 $_SERVER["PHP_AUTH_PW"] 没有设置?

    在开始之前 我想指出我浏览过 Stack Overflow 并发现了其他类似的问题 PHP AUTH USER 未设置 https stackoverflow com questions 3663520 php auth user not
  • 在闪亮的应用程序和多个页面中进行身份验证

    在我正在开发的系统中 我有 3 个不同的参与者 用户 管理员 支持团队 使用 Shiny App 我想知道如何向这三个参与者进行身份验证 每个参与者只能访问他们的页面 我发现使用闪亮的服务器专业版可以实现这一点 但它不是免费的 有什么方法可
  • ActiveAdmin 使用 Devise Rails 登录两次

    我有一个Rails已设置使用的应用程序devise with User模型 我只是添加ActiveAdmin并且它使用单独的型号名称AdminUser 这个新模型也使用了设计 我遇到的问题是 当我去localhost 3000 admin
  • 使用 Assetic PHP 通过 RVM 安装后 Sass 损坏

    我正在尝试设置 Assetic PHP 资源编译器 并且它可以与 CoffeeScript Stylus 和 Less 一起使用 所有 NPM 包都运行良好 然而 对于 Sass 我遇到了问题 以下是我到目前为止所采取的步骤 我安装了 RV
  • Rails 和 Mysql 的毫秒数

    使用 Rails Mysql 时存储时间 以毫秒为单位 的最佳方式是什么 我将使用小数和composed of 以便能够将该值作为Ruby 时间进行操作 有人有更好的主意吗 自从提出这个问题以来 已经过去了好几年了 这是更新的解决方案 ht
  • 定制导轨配置部分

    为 Rails 应用程序创建自定义配置部分的最佳方法是什么 理想情况下 我希望最终结果是一个 api 调用 例如 Rails configuration foo bar Rails configuration foo baz e g Rai
  • 如何在启动 Rails 控制台时自动运行代码?

    假设每次 Rails 控制台出现时我都想要一个问候语 Scotts MBP 4 ucode scott rails c Loading development environment Rails 4 2 1 Hello there I m

随机推荐

  • 如何在 Sublime Text 中格式化 django 模板

    如何在 Sublime Text 中格式化 django 模板 我的模板包括 HTML django 模板语言与 variable and stuff javascript 有没有办法获得 PyCharm 提供的相同类型的格式 这个包应该可
  • 在 Blazor 中增加文本区域

    我需要一个随着行数增加而增长的文本区域 一旦行被删除 TextArea 就会再次缩小 在最好的情况下具有最大高度 它如何与 Javascript 一起工作我已经可以在这里阅读 根据内容长度调整文本区域大小 https stackoverfl
  • Spring中Bean创建异常

    我正在尝试自动装配在另一个项目中声明的类 但是在我收到运行时异常而不是编译时异常 如果我删除自动装配并使用新实例创建一个对象 它会完美运行 我收到以下错误 ErrorSEVERE StandardWrapper Throwable org
  • 如何通过Java程序调节扬声器音量?

    我运行的是 Win Vista 在窗口右下角的时钟旁边有一个扬声器图标 我可以单击它并调整音量 我想知道我的 Java 程序中是否有办法自动执行此操作 例如 当我的Java程序启动时 它将音量调至80 当程序退出时 它将音量调回原来的水平
  • Bouncy castle 中使用 SHA256 的 ECDSA 抛出无此类算法异常

    我正在尝试使用生成签名ECDSA with SHA256 in Bouncy Castle如下 我在开头添加了提供者 我已经构建了 ECPrivatekey Signature s oSignature Signature getInsta
  • 仅当存在查询字符串时才适用于图像文件请求的 RewriteRule

    由于我有限的正则表达式和 mod rewrite 能力 我正在尝试重写某些图像请求 以便我可以使用 php 脚本更改输出 这是我所拥有的 RewriteRule public uploads A Za z0 9 JPEG JPG GIF P
  • 检查是否使用 JQuery 设置了 URL 变量

    我想知道是否有一个 jQuery 函数可以检查 URL 中的变量是否已设置 类似于 PHP 中的 isset 函数 Thanks jQuery 没有获取 URL 参数的本机函数 但你可以编写自己的插件 extend getUrlVars f
  • Python 中方括号和括号括起来的列表有什么区别?

    gt gt gt x 1 2 gt gt gt x 1 2 gt gt gt x 1 2 gt gt gt x 1 2 它们都有效吗 是否因某种原因而受到青睐 方括号是lists http docs python org tutorial
  • 覆盖 require 后调用 lua_getfield() 时崩溃

    这个问题与 Henri Menke 在这个问题中的回答相关 如何在 C 中获取预加载模块名称 https stackoverflow com questions 51510308 how to get preloaded module na
  • 如何在自定义视图中绘制文本?

    我创建了自定义视图来在内部绘制自定义语音气泡 我想在自定义视图上放置一些文本 我用在路径上绘制文本但它不起作用 我希望文本逐行显示 自定义视图 语音气泡 Paint paint new Paint paint setColor Color
  • 如何检查openpyxl python中的单元格是否为空

    我正在做一个条件语句openpyxlPython 检查单元格是否为空 这是我的代码 newlist looprow 1 print Highest col readex get highest column getnewhighcolumn
  • 如何让DataTemplate填充DataGridTemplateColumn

    我有以下用于创建数据网格的 XAML
  • 是否可以在 ggplot2 堆叠条中的堆叠之间放置空间?

    我把这个例子取自here https stackoverflow com questions 21236229 ggplot2 stacked bar chart DF lt read table text Rank F1 F2 F3 1
  • Spark UDAF以ArrayType作为bufferSchema性能问题

    我正在开发一个返回元素数组的 UDAF 每次更新的输入是索引和值的元组 UDAF 的作用是将同一索引下的所有值相加 Example 对于输入 索引 值 2 1 3 1 2 3 应该返回 0 0 4 1 0 逻辑工作正常 但我有一个问题更新方
  • PHP 会话似乎无法正常工作

    会话变量显然不适合我 我不知道我做错了什么 这是我用来检查有效密码的代码 if input password hash password hash session start SESSION is user 1 header Locatio
  • 我可以从 Lambda 层导入打字稿类型吗?

    我尝试在构建 Lambda 函数时使用 TypeScript 但在使用也是用 TypeScript 编写的 Lambda 层时遇到问题 TypeScript 无法识别我的层的 opt nodejs 导入 因为它将在 SAM 或 AWS 中运
  • 是否可以使用带有 FUSE 文件系统的 Linux VFS 缓存?

    默认情况下 Linux VFS 缓存似乎不适用于 FUSE 文件系统 例如 read 调用似乎被系统地转发到 FUSE 文件系统 我在 FUSE 特定的远程文件系统上工作 我需要一个非常积极的缓存 我需要实现自己的页面缓存吗 或者是否可以为
  • htaccess 重写和递归内部重定向

    我想做一个简单的内部 htaccess 重写 即 http localhost icore4 t9 module ac Main php do subject add to http localhost icore4 module ac M
  • 学说-按日期分组

    我有这个查询 SELECT DATE FORMAT exp date Y m AS Month sum exp total FROM export GROUP BY DATE FORMAT exp date Y m 我尝试将其转换为 Sym
  • 使用 Ruby 和 Mechanize 登录网站

    我需要从网站上抓取数据 但这需要我先登录 我一直在使用 hpricot 成功抓取其他网站 但我对使用 mechanize 还很陌生 而且我真的对如何使用它感到困惑 我看到这个例子经常被引用 require rubygems require