2012-06-26 20 views
7

sono nuovo di scrapy e ho deciso di provarlo a causa di buone recensioni online. Sto cercando di accedere a un sito Web con scrapy. Ho eseguito correttamente l'accesso con una combinazione di selenio e meccanizzazione raccogliendo i biscotti necessari con il selenio e aggiungendoli a meccanizzare. Ora sto cercando di fare qualcosa di simile con il scrapy e il selenio, ma non riesco a far funzionare nulla. Non posso nemmeno dire se qualcosa funziona o no. Qualcuno può aiutarmi per favore. Di seguito è ciò che Ive ha iniziato. Potrei anche non aver bisogno di trasferire i cookie con scrapy, ma non posso dire se la cosa in realtà in realtà accede o no. Grazielogin di autenticazione scrapy con i cookie

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() 

risposta

10

La tua domanda è più che altro questione di debug, quindi la mia risposta avrà solo alcune note sulla tua domanda, non è la risposta esatta.

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 - si sta assegnando una funzione qui, non il risultato viene restituito. Penso che non sia necessario passare alcuna funzione qui come parametro. Dovrebbe essere:

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

cookies argomento per Request dovrebbe essere un dict - si prega di verificare che sia davvero un dict.

Non riesco nemmeno a capire se qualcosa funziona o no.

Inserire alcune stampe nei callback per seguire l'esecuzione.

+1

Dopo aver corretto i problemi che hai notato, ero in grado di accedere con successo! Nota: i cookie che il selenio ha restituito erano un elenco di dizionari che dovevano essere modificati in un singolo dizionario. Grazie mille per l'aiuto. – JonDog

+0

scusa, sono nuovo nello stackoverflow. Sono stanco di votare ma dice che ho bisogno di 15 reputazione prima di poter votare. Non vedo nessun altro modo per contrassegnare come risposta. AGGIORNAMENTO - Ok, ho fatto clic sul segno di spunta. Penso sia così. – JonDog

+0

@ JohnDog ... potresti postare come hai gestito la conversione dei cookie da un modulo all'altro – Amistad

Problemi correlati