2012-06-26 8 views
7

私はスクラップに新しいので、良いオンラインレビューのために試してみることにしました。私はscrapyでウェブサイトにログインしようとしています。私はセレンの組み合わせでうまくログインし、必要なクッキーをセレンで収集して機械化することによって機械化しました。今私は、治療やセレンと似たようなことをしようとしていますが、何もできないようです。私は本当に何かが働いているかどうかわからない。誰でも助けてくれますか?以下はIveが始めたものです。私は甘いものでクッキーを転送する必要はないかもしれませんが、事が実際にログインしているかどうかはわかりません。 おかげクッキーを使用したスクワプリ認証ログイン

from scrapy.spider import BaseSpider 
from scrapy.http import Response,FormRequest,Request 
from scrapy.selector import HtmlXPathSelector 
from selenium import webdriver 

class MySpider(BaseSpider): 
    name = 'MySpider' 
    start_urls = ['http://my_domain.com/'] 

    def get_cookies(self): 
     driver = webdriver.Firefox() 
     driver.implicitly_wait(30) 
     base_url = "http://www.my_domain.com/" 
     driver.get(base_url) 
     driver.find_element_by_name("USER").clear() 
     driver.find_element_by_name("USER").send_keys("my_username") 
     driver.find_element_by_name("PASSWORD").clear() 
     driver.find_element_by_name("PASSWORD").send_keys("my_password") 
     driver.find_element_by_name("submit").click() 
     cookies = driver.get_cookies() 
     driver.close() 
     return cookies 

    def parse(self, response,my_cookies=get_cookies): 
     return Request(url="http://my_domain.com/", 
      cookies=my_cookies, 
      callback=self.login) 

    def login(self,response): 
     return [FormRequest.from_response(response, 
      formname='login_form', 
      formdata={'USER': 'my_username', 'PASSWORD': 'my_password'}, 
      callback=self.after_login)] 

    def after_login(self, response): 
     hxs = HtmlXPathSelector(response) 
     print hxs.select('/html/head/title').extract() 

答えて

10

は、あなたの質問は、デバッグの問題の詳細ですので、私の答えはあなたの質問ではなく、正確な答えにちょうどいくつかのメモを持っています。

def parse(self, response,my_cookies=get_cookies): 
    return Request(url="http://my_domain.com/", 
     cookies=my_cookies, 
     callback=self.login) 

my_cookies=get_cookies - ここに関数を割り当てていますが、結果は返されません。私はあなたがここでパラメータとして関数を渡す必要はないと思う。それは次のようになります。Requestため

def parse(self, response): 
    return Request(url="http://my_domain.com/", 
     cookies=self.get_cookies(), 
     callback=self.login) 

cookies引数は辞書でなければなりません - それは確かに辞書で確認してください。

実際に何かが動作しているかどうかはわかりません。

いくつかのプリントをコールバックに入れて、実行に従います。

+1

問題を修正した後、私は正常にログインできました!注:セレンが返すクッキーは、辞書のリストを1つの辞書に変更する必要がありました。助けてくれてありがとう。 – JonDog

+0

申し訳ありませんが、私は新しいstackoverflowに。私は投票に疲れましたが、私は投票する前に15の評判が必要だと言います。私はいずれかの答えとしてマークする他の方法が表示されない..更新 - 確認、私はチェックマークをクリックした。私はそうだと思います。 – JonDog

+0

@ JohnDog..あなたは、最新のバージョンであるScrapy 0.24の中で、あるフォームから別のフォームへのクッキー変換をどのように扱いましたか? – Amistad

関連する問題