【问题标题】:ChromeSessionParser syntax issueChromeSessionParser 语法问题
【发布时间】:2016-04-30 04:19:12
【问题描述】:

我的部分代码遇到问题,我在底部添加了错误。问题是围绕 sqllite3.operationError 部分出现的。我试图删除它,但是当我对第 68 行“def getpath():”执行另一个错误时,我不明白为什么会出现错误,并且一如既往地感谢所有帮助。我的代码通常用于将登录数据从我的数据库中取出并显示在 csv 文件中

import os
import sys
import sqlite3
try:
    import win32crypt
except:
    pass
import argparse



def args_parser():
    parser = argparse.ArgumentParser(description="Retrieve Google Chrome Passwords")
    parser.add_argument("--output", help="Output to csv file", action="store_true")
    args = parser.parse_args()
    if args.output:
        csv(main())
    else:
            for data in main():
                print (data)



def main():
    info_list = []
    path = getpath()
    try:
        connection = sqlite3.connect(path + "Login Data")
        with connection:
            cursor = connection.cursor()
            v = cursor.execute('SELECT action_url, username_value, password_value FROM logins')
            value = v.fetchall


        for information in value:
            if os.name == 'nt':
                password = win32crypt.CryptUnprotectData(information[2], None, None, None, 0)[1]
                if password:
                    info_list.append({
                        'origin_url': information[0],
                        'username': information[1],
                        'password': str(password)
                    })



    except sqlite3.OperationalError as e:
        e = str(e)
        if (e == 'database is locked'):
            print('[!] Make sure Google Chrome is not running in the background')
            sys.exit(0)
        elif (e == 'no such table: logins'):
            print('[!] Something wrong with the database name')
            sys.exit(0)
        elif (e == 'unable to open database file'):
            print('[!] Something wrong with the database path')
            sys.exit(0)
        else:
            print (e)
            sys.exit(0)



    return info_list



def getpath():
        if os.name == "nt":
            # This is the Windows Path
            PathName = os.getenv('localappdata') + '\\Google\\Chrome\\User Data\\Default\\'
            if (os.path.isdir(PathName) == False):
                print('[!] Chrome Doesn\'t exists')
                sys.exit(0)

            return PathName



def csv (info):
    with open ('chromepass.csv', 'wb') as csv_file:
        csv_file.write('origin_url,username,password \n' .encode('utf'))
        for data in info:
            csv_file.write(('%s, %s, %s \n' % (data['origin_url'], data['username'], data['password'])).encode('utf-8'))
    print ("Data written to Chromepass.csv")




if __name__ == '__main__':
    args_parser()

错误

 Traceback (most recent call last):
  File "C:/Users/Lewis Collins/Python Project/ChromeDB's/ChromeSessionParser.py", line 90, in <module>
    args_parser()
  File "C:/Users/Lewis Collins/Python Project/ChromeDB's/ChromeSessionParser.py", line 19, in args_parser
    for data in main():
  File "C:/Users/Lewis Collins/Python Project/ChromeDB's/ChromeSessionParser.py", line 35, in main
    for information in value:
TypeError: 'builtin_function_or_method' object is not iterable

【问题讨论】:

    标签: python function google-chrome syntax sqlite


    【解决方案1】:

    正确的方法是:

    except sqlite3.OperationalError as e:
    

    而你main() 应该是这样的:

    def main():
        info_list = []
        path = getpath()
        try:
            connection = sqlite3.connect(path + "Login Data")
            with connection:
                cursor = connection.cursor()
                v = cursor.execute('SELECT action_url, username_value, password_value FROM logins')
                value = v.fetchall
    
    
            for information in value:
                if os.name == 'nt':
                    password = win32crypt.CryptUnprotectData(information[2], None, None, None, 0)[1]
                    if password:
                        info_list.append({
                            'origin_url': information[0],
                            'username': information[1],
                            'password': str(password)
                        })
    
    
    
        except sqlite3.OperationalError as e:
            e = str(e)
            if (e == 'database is locked'):
                print '[!] Make sure Google Chrome is not running in the background'
                sys.exit(0)
            elif (e == 'no such table: logins'):
                print '[!] Something wrong with the database name'
                sys.exit(0)
            elif (e == 'unable to open database file'):
                print '[!] Something wrong with the database path'
                sys.exit(0)
            else:
                print e
                sys.exit(0)
    
    
    
        return info_list
    

    【讨论】:

    • 感谢您的帮助,我知道这只是小问题
    • 我已经解决了这个问题,现在收到了新的错误 Traceback(最近一次调用最后一次):文件“C:/Users/Lewis Collins/Python Project/ChromeDB's/ChromeSessionParser.py”,第 90 行,在 args_parser() 文件“C:/Users/Lewis Collins/Python Project/ChromeDB's/ChromeSessionParser.py”中,第 19 行,在 args_parser 中用于 main() 中的数据:文件“C:/Users/Lewis Collins/Python Project/ChromeDB's/ChromeSessionParser.py",第 35 行,主要用于获取值中的信息:TypeError: 'builtin_function_or_method' object is not iterable
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2011-09-21
    • 2019-11-07
    • 2019-12-29
    • 2011-07-29
    相关资源
    最近更新 更多