Goutteでのスクレイピングでとあるサイトのログインを実装しようとしているのですが、ID、パスワードを入力して送信の動作がうまくいきません。
通常、ログインを行うには以下のようなコードで動くと思います(Bitbuketのログインで試しました)
PHP
1$crawler = $client->request('GET', 'https://sample.com/login/'); 2$loginForm = $crawler->filter('form#login-form')->form(); 3$loginForm['username'] = '**********@sample.com'; 4$loginForm['password'] = '*********' 5$crawler = $client->submit($loginForm);
しかし現在試行錯誤しているサイトでは上記の方法ではうまくいきませんでした。
違いを調べてみると、
成功したサイト
<input type="submit" value="ログイン">
失敗したサイト
<button type="submit" name="_eventId_proceed" onclick="this.childNodes[0].nodeValue='ログインしています…'">ログイン</button>
といったようにログインボタンの形式が違いました。
これが原因かはわかりませんが、上記のコードで$client->submit()をしてもページ遷移されていないようです。
試しに、フォームには値を入れずにButton要素を直接クリック
PHP
1$crawler = $client->click($button = $crawler->selectButton('ログイン')->form());
してみると「IDまたはパスワードが違います」と出すことはできました。
$client->getHistory()の内容を見てみると、確かにButtonを直接クリックしたときより$client->submit()をした時のほうがページ遷移が一回少なかったです。
そこでフォームに値を直接入力できればログインボタンを押すことはできるのでログインできるのではないでしょうか?
フォームに値を入れる方法ですが、調べても私の力ではわかりませんでした。
もしご存知の方がいらっしゃったら教えてください。
この方法でなくてもログインさえ出来ればいいのでどんな方法でも教えていただけたらうれしいです。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/08 11:52