flexget.plugins.module_formlogin
Covered: 15 lines
Missed: 39 lines
Skipped 25 lines
Percent: 27 %
 1
import logging
 2
from flexget.feed import Entry
 3
from flexget.plugin import *
 4
import urllib2
 6
log = logging.getLogger('formlogin')
 9
class FormLogin(object):
10
    """
11
    Login on form
12
    """
14
    def validator(self):
15
        from flexget import validator
16
        root = validator.factory('dict')
17
        root.accept('url', key='url', required=True)
18
        root.accept('text', key='username', required=True)
19
        root.accept('text', key='password', required=True)
20
        root.accept('text', key='userfield') 
21
        root.accept('text', key='passfield')
22
        return root
24
    def on_feed_start(self, feed):
25
        try:
26
            from mechanize import Browser
27
        except ImportError:
28
            raise PluginError('mechanize required (python module), please install it.', log)
30
        config = feed.config['form']
32
        userfield = config.get('userfield', 'username')
33
        passfield = config.get('passfield', 'password')
35
        url = config['url']
36
        username = config['username']
37
        password = config['password']
39
        br = Browser()
40
        br.set_handle_robots(False)
41
        try:
42
            br.open(url)
43
        except Exception, e:
45
            raise PluginError('Unable to post login form', log)
51
        for form in br.forms():
52
            loginform = form
54
            try:
55
                loginform[userfield] = username
56
                loginform[passfield] = password
57
                break
58
            except Exception, e:
59
                raise PluginError('Unable to find login fields', log)
61
        br.form = loginform
63
        br.submit()
65
        cookiejar = br._ua_handlers["_cookies"].cookiejar
67
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
68
        urllib2.install_opener(opener)                                
70
    def on_feed_exit(self, feed):
71
        """Feed exiting, remove cookiejar"""
72
        log.debug('Removing urllib2 opener')
73
        urllib2.install_opener(None)
76
    on_feed_abort = on_feed_exit                                    
78
register_plugin(FormLogin, 'form')