Есть ли какой-нибудь быстрый способ проверить, успешно ли Scrapy заходит на сайт? - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь использовать Scrapy для входа в Github.

# -*- coding: utf-8 -*-
import scrapy

class AutoreplySpider(scrapy.Spider):
    name = 'AutoLogin'
    allowed_domains = ['github.com']
    start_urls = ['https://github.com/login']

    def parse(self, response):
        return scrapy.FormRequest.from_response(
            response,
            formdata={
                'login': 'ac',
                'password': 'pw'
            },
            callback=self.reply
        )

    def after_login(self, response):
        pass

Когда я вошел в Github вручную, я установил флажок «запомнить имя пользователя и пароль».Так что, если я не выйду из системы, это будет автоматический вход при повторном посещении Github.Я запустил скрипт в терминале, и он не выдал ошибку.Однако, когда я посещаю Github, он требует, чтобы я вошел в систему. Я не уверен, работает ли мой код.Я не трогал Scrapy некоторое время.Есть ли быстрый способ проверить, успешно ли я вошел в систему?Спасибо!

1 Ответ

0 голосов
/ 01 июня 2018

Код неверный.Часто формы имеют скрытые поля.При этом сервер будет проверять поля при отправке учетных данных на сервер.Я добавляю цикл для сбора всех полей ввода тегов.Когда часть формы верна, можно найти имя учетной записи на странице ответа.Если это существует, вы можете идти вперед.

class AutologinSpider(scrapy.Spider):
    name = 'AutoLogin'
    allowed_domains = ['DOMAIN_TO_LOGIN_COM']
    start_urls = ['URP_OF_FORM_PAGE']
    custom_settings = {'ROBOTSTXT_OBEY': False}

    def parse(self, response):
        inputs = response.css('form input')

        formdata = {}
        for input in inputs:
            name = input.css('::attr(name)').extract_first()
            value = input.css('::attr(value)').extract_first()
            formdata[name] = value

        formdata['login'] = 'YOUR_LOGIN'
        formdata['password'] = 'YOUR_PASSWORD'

        return scrapy.FormRequest.from_response(
            response,
            formdata=formdata,
            callback=self.after_login
        )

    def after_login(self, response):
        if not response.css('ul.dropdown-menu li strong::text').extract_first() == 'YOU_ACCOUNT_NAME':
            # Something wrong.
            pass
    # You have successfully logged in. Put you code here.
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...