2017-06-22 4 views
2

Scrapyでウェブサイトにログインしようとしましたが、受信した応答はインラインJavaScriptのみを含むHTMLドキュメントです。 JSはデータをスクラップするページにリダイレクトされます。しかし、ScrapyはJSを実行しないので、私が望むページにはルーティングしません。ScreamレスポンスでインラインJavaScriptを実行

私は必要なログインフォームを送信するには、次のコードを使用し

def parse(self, response): 
     request_id = response.css('input[name="request_id"]::attr(value)').extract_first() 
     data = { 
      'userid_placeholder': self.login_user, 
      'foilautofill': '', 
      'password': self.login_pass, 
      'request_id': request_id, 
      'username': self.login_user[1:] 
     } 
     yield scrapy.FormRequest(url='https://www1.up.ac.za/oam/server/auth_cred_submit', formdata=data, 
           callback=self.print_p) 

次のようにprint_pコールバック関数は次のとおりです。

def print_p(self, response): 
    print(response.text) 

私はscrapyスプラッシュを見てきましたが、私は見つけることができませんでしたscrapy-splashでレスポンスでJSを実行する方法。

+0

JSリダイレクトが表示されるページに手動で移動しようとしましたか? (すなわち、 'print_p'にURLをスクラップし、このページにリクエストを返します) – Pablo

+0

@Pablo JSはURLを作成してリダイレクトします。 – Craig

答えて

2

おそらくセレンがこのJSを渡すのを助けることができます。

まだチェックしていない場合は、thisのような例を使用できます。あなたはそれに到達する運を持っていますなら、あなたはしてページのURLを取得することができます。

self.driver.current_url 

そして後にそれをこすり。

3

レンダリングサービスとしてSplashを使用することをお勧めします。個人的に、私はそれがセレニウムよりも信頼できることを発見しました。 scriptsを使用すると、ページと対話するように指示できます。

関連する問題