Пример #1
0
def delete_account(site, type, username):
    conn = RedisClient(type, site)
    num = 0
    while num < 5:
        result = conn.delete(username)
        if result:
            print('删除 {} 成功! '.format(username))
            break
        num += 1
        time.sleep(1)
    print('删除失败, 请手动删除! ')
Пример #2
0
 def run():
     for website in ACCOUNTS.keys():
         print('*' * 40)
         print('%s正在检测cookies...' % website)
         acc = RedisClient('accounts', website)
         coo = RedisClient('cookies', website)
         log = eval(website.capitalize() + 'Login()')
         for username, password in acc.get_all().items():
             # 第一次运行时,可能数据还未录入就开始测试,因此加异常处理
             try:
                 cookies = coo.get(username)
                 if log.good_cookies(cookies):
                     print('\t%s\t\tCookies已通过检测...' % username)
                 else:
                     print('\t%s\t\tCookies未通过检测!!!' % username)
                     coo.delete(username)
                     print('\t%s\t\tCookies已删除!!!' % username)
                     log.login(username, password)
                     cookies = log.get_cookies()
                     coo.set(username, cookies)
             except Exception as e:
                 print('数据库为空,请等数据录入之后再进行测试:', e.args)
Пример #3
0
class CookiesGenerator(object):
    def __init__(self, website='default'):
        """
        父类,初始化一些对象
        :param website: 名称
        :param browser: 浏览器,不用可以设置为None
        """
        self.website = website
        self.cookies_db = RedisClient('cookies', self.website)
        self.accounts_db = RedisClient('accounts', self.website)
        self.init_browser()

    def __del__(self):
        self.close()

    def init_browser(self):
        """
        通过browser参数初始化全局游览器共模拟登录使用
        :return:
        """
        if BROWSER_TYPE == 'PhantomJS':
            caps = DesiredCapabilities.PHANTOMJS
            caps[
                "phantomjs.page.settings.userAgent"] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
            self.browser = webdriver.PhantomJS(desired_capabilities=caps)
            self.browser.set_window_size(1400, 500)
        elif BROWSER_TYPE == 'Chrome':
            self.browser = webdriver.Chrome()

    def new_cookies(self, username, password):
        """
        新生成Cookies,子类需要重写
        :param username: 用户名
        :param password: 密码
        :return:
        """
        return NotImplementedError

    def process_cookies(self, cookies):
        """
        处理cookies
        :param cookies:
        :return:
        """
        dict = {}
        for cookie in cookies:
            dict[cookie['name']] = cookie['value']
        return dict

    def run(self):
        """
        运行,得到所有账户,然后顺次模拟登录
        :return:
        """
        accounts_usernames = self.accounts_db.usernames()
        cookies_usernames = self.cookies_db.usernames()

        for username in accounts_usernames:
            if not username in cookies_usernames:
                password = self.accounts_db.get(username)
                print('正在生成Cookies', '账号', username, '密码', password)
                result = self.new_cookies(username, password)
                # 成功获取
                if result.get('status') == 1:
                    cookies = self.process_cookies(result.get('content'))
                    print('成功获取到Cookies', cookies)
                    if self.cookies_db.set(username, json.dumps(cookies)):
                        print('成功保存Cookies')
                # 密码错误,移除账号
                elif result.get('status') == 2:
                    print(result.get('content'))
                    if self.accounts_db.delete(username):
                        print('成功删除账号')
                else:
                    print(result.get('content'))
            else:
                print('所有账号都已经成功获取Cookies')

    def close(self):
        """
        关闭
        :return:
        """
        try:
            print('Closing Browser')
            self.browser.close()
            del self.browser
        except TypeError:
            print('Browser not opened')
Пример #4
0
class CookiesGenerator(object):
    def __init__(self, website = 'default'):
        self.website = website
        self.cookies_db = RedisClient('cookies', self.website)
        self.accounts_db = RedisClient('accounts', self.website)
        self.init_browser()

    def __del__(self):
        self.close()

    def init_browser(self):
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument('--headless')
        self.browser = webdriver.Chrome(chrome_options = chrome_options)
        
    def new_cookies(self, username, password):
        """
        新生成Cookies,子类需要重写
        :param username: 用户名
        :param password: 密码
        :return:
        """
        raise NotImplementedError

    def process_cookies(self, cookies):
        dict = {}
        for cookie in cookies:
            dict[cookie['name']] = cookie['value'] 
        return dict

    def run(self):
        account_usernames = self.accounts_db.usernames()
        cookies_usernames = self.cookies_db.usernames()

        for username in account_usernames:
            if not username in cookies_usernames:
                password = self.accounts_db.get(username)
                print('Generating new cookies...[username: {} password: {}]'.format(username, password))
                result = self.new_cookies(username, password)
                
                if result.get('status') == 1:
                    cookies = self.process_cookies(result.get('content'))
                    print('Generated successfully!')
                    if self.cookies_db.set(username, json.dumps(cookies)):
                        print('Saved new cookies successfully!')
                elif result.get('status') == 2:
                    print(result.get('content'))
                    if self.accounts_db.delete(username):
                        print('Deleted invalid account successfully! [username: {}]'.format(username))
                else:
                    print(result.get('content'))
        else:
            print('All accounts has got cookies successfully!')

    def close(self):
        try:
            print('Closing browser...')
            self.browser.close()
            del self.browser
            print('Browser has closed!')
        except TypeError:
            print('Browser not opened!')
Пример #5
0
class CookiesGenerator:
    """
    Cookie 生成器基类
    """
    def __init__(self, site, single_cycle_limit):
        self.site = site
        # 单轮登录数量上限
        self.single_cycle_limit = single_cycle_limit
        self.cookies_db = RedisClient('cookies', self.site)
        self.accounts_db = RedisClient('accounts', self.site)

    def new_cookies(self, username, password):
        """
        新生成 Cookies
        :param username: 用户名
        :param password: 密码
        :return:
        """
        raise NotImplementedError

    @staticmethod
    def process_cookies(cookies):
        """
        处理 cookies
        :param cookies:
        :return:
        """
        return {cookie['name']: cookie['value'] for cookie in cookies}

    def run(self):
        """
        运行账号池的所有账号生成 cookie
        :return:
        """
        accounts_usernames = self.accounts_db.usernames()
        cookies_usernames = self.cookies_db.usernames()
        num = 0
        for username in accounts_usernames:
            if num >= self.single_cycle_limit:
                print('已达单轮登录上限, 停止登录! ')
                return
            if username not in cookies_usernames:
                password = self.accounts_db.get(username).decode('utf-8')
                username = username.decode('utf-8')
                print('正在生成 Cookies -> 账号: {}, 密码: {}'.format(
                    username, password))
                result = self.new_cookies(username, password)
                if result.get('status') == '1':
                    if isinstance(result['result'], list):
                        cookies = self.process_cookies(result['result'])
                    else:
                        cookies = result['result']
                    print('成功生成 Cookies : {}'.format(cookies))
                    if self.cookies_db.set(username, json.dumps(cookies)):
                        print('成功保存至 Cookie Pool!')
                    else:
                        print('疑似 redis 连接断开, 未成功保存, 尝试调用录入器保存...')
                        set_account(
                            self.site, 'cookies',
                            '{} {}'.format(username, json.dumps(cookies)))
                # 密码错误, 移除账号
                elif result.get('status') == '3':
                    print(result['result'])
                    if self.accounts_db.delete(username):
                        print('删除账号: ', username)
                    else:
                        print('疑似 redis 断开连接, 删除失败, 尝试调用删除器删除...')
                        delete_account(self.site, 'accounts', username)
                else:
                    print(result.get('result'))
                num += 1
            else:
                continue
            sleep_time = random.randint(90, 180)
            # print('休息{}秒...'.format(sleep_time))
            time.sleep(sleep_time)
        print('所有账号生成完毕! ')
Пример #6
0
class CookiesGenerator():
    def __init__(self, website="default"):
        self.website = website
        self.cookie_db = RedisClient('cookies', self.website)
        self.account_db = RedisClient('accounts', self.website)
        self.browser = self.init_browser()

    def init_browser(self):
        if BROWSER_TYPE == "PhantomJS":
            caps = DesiredCapabilities.PHANTOMJS
            caps[
                "phantomjs.page.settings.userAgent"] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'

            browser = webdriver.PhantomJS(desired_capabilities=caps)
            browser.set_window_size(1400, 500)
            return browser
        elif BROWSER_TYPE == "Chrome":
            browser = webdriver.Chrome()
            return browser

    def new_cookies(self, username, password):

        raise NotImplementedError

    def parse_cookies_dict(self, cookies):
        dic = {}
        for cookie in cookies:
            dic[cookie['name']] = cookie['value']

        return dic

    def run(self):
        account_usernames = self.account_db.usernames()
        cookies_usernames = self.cookie_db.usernames()

        for username in account_usernames:
            if not username in cookies_usernames:
                password = self.account_db.get(username)
                print("正在生成Cookies", username, password)
                result = self.new_cookies(username, password)
                if result.get("status") == 1:
                    cookies = self.parse_cookies_dict(result.get('content'))
                    print("成功获取Cookies", cookies)
                    if self.cookie_db.set(username, json.dumps(cookies)):
                        print("成功保存Cookies")
                elif result.get('status') == 2:
                    print("密码错误")
                    if self.account_db.delete(username):
                        print("删除成功")
                else:
                    print(result.get("content"))

        print("所有账号已经成功获取Cookies")

    def close(self):
        try:
            print("Closing Browser")
            self.browser.close()
            del self.browser
        except TypeError:
            print("Browser not opened")

    def __del__(self):
        self.close()