2012-06-26 29 views
7

tôi mới dùng mưu mẹo và quyết định dùng thử vì các đánh giá trực tuyến tốt. Tôi đang cố gắng đăng nhập vào một trang web bị lúng túng. Tôi đã đăng nhập thành công với một sự kết hợp của selen và cơ giới hóa bằng cách thu thập các cookie cần thiết với selen và thêm chúng vào cơ giới hóa. Bây giờ tôi đang cố gắng để làm một cái gì đó tương tự với scrapy và selen nhưng cant dường như để có được bất cứ điều gì để làm việc. Tôi thậm chí không thể biết được có điều gì đang hoạt động hay không. Ai đó làm ơn giúp tôi với. Dưới đây là những gì tôi đã bắt đầu. Tôi có thể thậm chí không cần phải chuyển các tập tin cookie với scrapy nhưng tôi không thể nói nếu điều thực sự bao giờ đăng nhập hay không. Cảm ơnđăng nhập xác thực không hợp lệ vớ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() 

Trả lời

10

Câu hỏi của bạn là chi tiết của vấn đề debug, vì vậy câu trả lời của tôi sẽ chỉ có một số lưu ý về câu hỏi của bạn, không phải là câu trả lời chính xác.

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 - bạn đang chỉ định một hàm ở đây chứ không phải kết quả trả về. Tôi nghĩ rằng bạn không cần phải vượt qua bất kỳ chức năng ở đây như là tham số ở tất cả. Nó nên là:

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

cookies luận cho Request phải là một dict - hãy xác minh nó thực sự là một dict.

Tôi thậm chí không thể biết liệu có điều gì hoạt động hay không.

Đặt một số bản in trong các cuộc gọi lại để thực hiện theo thực thi.

+1

Sau khi khắc phục các sự cố bạn đã lưu ý, tôi có thể đăng nhập thành công! Lưu ý: các tập tin cookie mà selenium trả lại là danh sách các từ điển đã được thay đổi thành một từ điển duy nhất. Cảm ơn rất nhiều vì đã giúp đỡ. – JonDog

+0

xin lỗi, Im mới vào stackoverflow. Tôi mệt mỏi bỏ phiếu nhưng nó nói rằng tôi cần 15 danh tiếng trước khi tôi có thể bỏ phiếu. Tôi không thấy bất kỳ cách nào khác để đánh dấu là trả lời hoặc .. UPDATE - Ok, tôi nhấp vào dấu kiểm. Tôi nghĩ vậy. – JonDog

+0

@ JohnDog..có thể bạn vui lòng đăng bài về cách bạn xử lý chuyển đổi cookie từ một biểu mẫu sang – Amistad

Các vấn đề liên quan