質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

2回答

2992閲覧

rubyでmechanizeを使ってログイン

shigahi

総合スコア21

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2016/10/20 05:52

###前提・実現したいこと
rubyでウェブスクレイピングを行うために、mechanizeを利用してログインをしたいのですが、
エラーが出てしまいます。

###発生している問題・エラーメッセージ

in 'block (2 levels) in <main>' : undefined method 'loginid=' for nil :NilClass(NoMethodError)
from (eval):in 'form_with'

###該当のソースコード
require 'nokogiri'
require 'mechanize'

agent = Mechanize.new
agent.user_agent_alias = 'Windows Mozilla'
agent.get('https://www.watashi-move.jp/pc/login.php?wllink=1/') do |page|
mypage = page.form_with(name: 'form1') do |form|
form.loginid = '*****'
form.pwasswd = '
****'
end.submit

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

そのエラーは、formの指定の仕方が間違っているため、見つけることができないことが原因です。

ruby

1 mypage = page.form_with(name: 'form1') do |form|

ではなく、正しくは

ruby

1 mypage = page.form_with(id: 'form1') do |form|

です。

実際に動かしてみたところ、以下も間違えているようでしたので、追記しておきます。

ruby

1form.pwasswd = '**'

ruby

1form.password = '**'

mypage = page.form_with(id: 'form1') do |form|の
'form1'の部分に該当する部分がよく分からなくて、

ログインの対象となるフォームのソースが以下です。

html

1<form id="form1" action="https://www.watashi-move.jp/pc/login.php" method="post" autocomplete="off">

そのフォームの

html

1id="form1"

の部分を指定しています。

例えばformが次のようなものだったら、

html

1<form id="login-form" action="https://www.watashi-move.jp/pc/login.php" method="post" autocomplete="off">

以下のように指定します。

ruby

1mypage = page.form_with(id: 'login-form') do |form|

投稿2016/10/20 12:10

編集2016/10/24 11:43
cameluby

総合スコア891

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shigahi

2016/10/24 02:14 編集

とてもご丁寧に回答していただきありがとうございます。 早速試してみます。 追記 早速試してみたのですが、 mypage = page.form_with(id: 'form1') do |form|の 'form1'の部分に該当する部分がよく分からなくて、 実際のソースコードを見なければ分からないかもしれませんが、 もしアドバイスがあれば、どうかよろしくお願い致します。
cameluby

2016/10/24 11:28

回答に追記しました!
shigahi

2016/10/25 01:55

追記ありがとうございます! とても分かりやすいです! 早速試してみます!
shigahi

2016/10/25 04:59

何度も質問してしまって申し訳ないのですが、 'initialize' no implicit conversion of hash into string(TypeError) from: in 'open' from: in '<main>' というエラーが出てしまって、たぶん url = 'https://www.watashi-move.jp/wl/mydata/sphygmomanometer.php?targetDate=2016/07/01' user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36' charset = nil html = open(url, "User-Agent" => user_agent) do |f| charset = f.charset f.read この部分が原因なのですが、よく分からないので もしよかったら教えてください。 申し訳ありません。
guest

0

form1は、nameじゃなくてidなのでは?
あと、pwasswdはタイプミスですね。

デバッグのやり方を勉強しましょう。

#追記
MechanizeやNokogiriを使ったプログラムの開発は、irb等を使って対話的に進めると良いです。特に、Nokogiri部分。

Ruby

1irb -rmechanize 2← agent = Mechanize.new 3← agent.user_agent_alias = 'Windows Mozilla' 4← page = agent.get('https://www.watashi-move.jp/pc/login.php?wllink=1/') 5← page.forms 6・・・・・

対話的にやったことをあとでプログラムにします。
(gemでのインストールが必要ですがpryの方がirbより便利です)

投稿2016/10/20 06:17

編集2016/10/20 13:10
otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shigahi

2016/10/24 01:49

とてもご丁寧に回答していただきありがとうございます。 勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問