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

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

ただいまの
回答率

90.48%

  • selenium

    730questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Seleniumでクッキーを使いたい

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 4,972

yuki_90453

score 92

やりたい事

SeleniumとPhantomJSでクッキーを使いログイン画面を省略したいと考えています。

直面している問題

問題は2つあり。
1) 出力されるクッキーが複数あり、どれがログイン情報を格納しているかわかりません。
2) 複数のcookieを読み込んだ状態でアクセスしたいのですが、失敗してしまいます。

対象のクッキーのサンプル

[{:name=>"s_sess", :value=>"", :path=>"/", :domain=>".test.co.jp", :expires=>nil, :secure=>false},
{:name=>"friedrice", :value=>"", :path=>"/", :domain=>".example.co.jp", :expires=>#<DateTime: 2017-01-30T13:58:44+00:00 ((2457784j,50324s,46n),+0s,2299161j)>, :secure=>true},
{:name=>"s_pers", :value=>"", :path=>"/", :domain=>".test.co.jp", :expires=>#<DateTime: 2022-01-28T13:58:41+00:00 ((2459608j,50321s,999999892n),+0s,2299161j)>, :secure=>false},
{:name=>"riceball", :value=>"", :path=>"/", :domain=>"mainmenu.example.co.jp", :expires=>nil, :secure=>true},
{:name=>"shop", :value=>"", :path=>"/", :domain=>".example.co.jp", :expires=>nil, :secure=>true},
{:name=>"sesame", :value=>"", :path=>"/", :domain=>".example.co.jp", :expires=>#<DateTime: 2017-01-30T13:58:40+00:00 ((2457784j,50320s,999999973n),+0s,2299161j)>, :secure=>true},
{:name=>"ginger", :value=>"", :path=>"/", :domain=>".example.co.jp", :expires=>nil, :secure=>true}]

対象のコード

get "mainmenu.example.co.jp"
$selenium.manage.add_cookie([{:name=>"s_sess", :value=>"", :path=>"/", :domain=>".test.co.jp", :expires=>nil, :secure=>false},
{:name=>"friedrice", :value=>"", :path=>"/", :domain=>".example.co.jp", :expires=>#<DateTime: 2017-01-30T13:58:44+00:00 ((2457784j,50324s,46n),+0s,2299161j)>, :secure=>true},
{:name=>"s_pers", :value=>"", :path=>"/", :domain=>".test.co.jp", :expires=>#<DateTime: 2022-01-28T13:58:41+00:00 ((2459608j,50321s,999999892n),+0s,2299161j)>, :secure=>false},
{:name=>"riceball", :value=>"", :path=>"/", :domain=>"mainmenu.example.co.jp", :expires=>nil, :secure=>true},
{:name=>"shop", :value=>"", :path=>"/", :domain=>".example.co.jp", :expires=>nil, :secure=>true},
{:name=>"sesame", :value=>"", :path=>"/", :domain=>".example.co.jp", :expires=>#<DateTime: 2017-01-30T13:58:40+00:00 ((2457784j,50320s,999999973n),+0s,2299161j)>, :secure=>true},
{:name=>"ginger", :value=>"", :path=>"/", :domain=>".example.co.jp", :expires=>nil, :secure=>true}])
get "mainmenu.example.co.jp/aaaaa.html"
screenshot

備考

環境
Ruby
Selenium
PhantomJS

クライアント
アクセス先はIDとPWを入力する部分が2つあります。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

クッキーによるログイン管理に関しては、
基本的にIDやパスワードの文字列は絶対に持ちません。
クラッカーに抜かれた時点で大事になりますからね。

なので、今だけ使える一時的なログイン情報セションIDというものを新規に発行して管理しています。
具体名はシステム毎に変わるので推測するしかないのですが、SIDとかSESS等のクッキー名が怪しいですね。
このことから「s_sess」が該当するんじゃないかと思います。

また、セッションを管理しているクッキーは大抵ログインする沢山のユーザーを捌く為に半角英数字の32文字くらいのハッシュ値です。
クッキーの実体をテキストエディタかなにかで開いて、意味のなさそうな英数字の羅列を探しましょう。
これで更に絞り込むことが出来るかと思います。

他にも、クッキーは設定されたドメインでしか使えないのでdomainがシステムと一致するものだけ抜き出しましょう。
また、クッキーには制限時間もあるので、ログインを行ってクッキーを持ち帰ることに特化したコマンドも必要です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/04 15:09 編集

    ご返事ありがとうございます。

    >なので、今だけ使える一時的なログイン情報セションIDというものを新規に発行して管理しています。
    >具体名はシステム毎に変わるので推測するしかないのですが、SIDとかSESS等のクッキー名が怪しいですね。
    >このことから「s_sess」が該当するんじゃないかと思います。
    確かにログイン情報をそのままCookieに保存すると危ないですね。
    ログインしたいドメインと「s_sess」で設定されているドメインは異なります。
    このCookieの値の半角文字数は54文字でした。

    ドメインが一致するCookieは下記になります。
    $selenium.manage.add_cookie({:name=>'riceball', :value=>'', :path=>'/', :secure=>true, :expires=>nil, :domain=>'mainmenu.example.co.jp'})

    このドメインを設定しアクセスすると「Unable to set Cookie」と返されます。
    下記のURLに似た内容の質問があり、解決策として「先に対象ドメインにアクセスし、その後Cookieを設定する」という物でした。
    https://teratail.com/questions/54008

    下記のように先にドメインにアクセスしその後、Cookieを設定するという風に設定したのですが、結果は変わりませんでした。
    get "http://mainmenu.example.co.jp&quot;
    $selenium.manage.add_cookie({:name=>'riceball', :value=>'', :path=>'/', :secure=>true, :expires=>nil, :domain=>'mainmenu.example.co.jp'})

    キャンセル

同じタグがついた質問を見る

  • selenium

    730questions

    Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。