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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

4617閲覧

【スクレイピング】Ruby+Capybaraでログイン先の情報を取りたいけど、ログインフォームのIDが取れません。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2015/01/26 16:18

lang

1# coding: utf-8 2require 'capybara' 3require 'capybara/dsl' 4require 'capybara-webkit' 5require 'selenium-webdriver' 6 7Capybara.default_selector = :xpath 8Capybara.current_driver = :selenium 9Capybara.app_host = 'https://www.shufti.jp/projects/lists' 10Capybara.default_wait_time = 5 11 12module Crawler 13 class Services 14 include Capybara::DSL 15 16 def login 17 visit ('') 18 fill_in "username", 19 :with => '******' 20 fill_in "password", 21 :with => '******' 22 click_button "ログイン" 23 end 24 end 25end 26 27crawler = Crawler::Services.new 28crawler.login 29 30

こちらのコードでサイトにログインしたいです。fill_inにフォームのidかnameを指定するのですが、こちらのサイトのソースコードにはidが指定されていません。
name=data[User][email]
name=data[User][password]というnameという属性はあるのですが、こちらから値を取ることは可能なのでしょうか?
ちなみにエラーはCapybara::ElementNotFoundとなっています。
このようなマークアップのサイトにログインする方法が知りたいです。よろしくお願いします。URL:https://www.shufti.jp/users/login

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

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

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

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

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

guest

回答2

0

ベストアンサー

Capybara.default_selector = :xpath

となっているので、css selectorでなく、xpathで取得したらどうかと。

//*[@id='UserLoginForm']/div[2]/table//tr[1]/td/input

Firefoxのプラグインでxpathは簡単に調べられます。

投稿2015/01/29 16:06

kitaro_tn

総合スコア49

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

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

退会済みユーザー

退会済みユーザー

2015/01/30 18:39

xpathで取得し、無事ログインすることができました。なお、最新のFirefox35ではSelenium-webdriverがうまく機能しないバグがあるため、Firefox34を落とし、うまく動かすことが出来ました。 Function:1:in `anonymous': arguments[0] is undefined (Selenium::WebDriver::Error::JavascriptError)のエラーがでたらほぼ間違いないです。参考になれば。
guest

0

試してはいませんが、id 指定でなく name 指定すればできると思います。
name の指定の仕方の例が以下にありました。

...
<input class="string optional"
name="course_group[courses_attributes][2][name]"
... >

fill_in 'course_group_courses_attributes_2_name', :with => 'some text'

...
<input id="user_gender_male" name="user[gender]" type="radio" value="male" /> 男性
男性にチェックする場合。
choose "user_gender_male"

その他の参考

投稿2015/01/26 22:12

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2015/01/28 17:42

回答有難うございます。nameでも出来なかったので、css selecrorを使ってやっています。結果が出れば報告します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問