一尘不染

带有cookie的scrapy身份验证登录

selenium

我是新手,由于良好的在线评论,决定尝试一下。我正在尝试使用scrapy登录到一个网站。我已经通过selenium的组合成功登录了,并通过收集所需的selenium饼干并将其添加到机械化中进行了机械化。现在,我正在尝试对selenium和selenium进行类似的处理,但似乎无法使任何事情起作用。我什至无法分辨是否有任何工作。谁能帮帮我吗。我是从下面开始的。我什至不需要用曲奇的方式来传送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()

阅读 284

收藏
2020-06-26

共1个答案

一尘不染

您的问题更多是调试问题,因此我的答案将仅包含有关您的问题的一些注释,而不是确切的答案。

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-您在此处分配的是函数,而不是返回的结果。我认为您根本不需要在这里传递任何函数作为参数。它应该是:

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

cookies的论据Request应为dict-请确认它确实为dict。

我什至无法分辨是否有任何工作。

将一些打印品放在回调中以跟随执行。

2020-06-26