首页 > 解决方案 > 从json解析它只选择最后一个元素?

问题描述

今天有人试图通过钓鱼网站窃取我的登录信息。所以我决定用随机的电子邮件和密码向那个网站发送垃圾邮件,我找到了一段代码,它似乎可以工作。代码:

import requests
import os
import random
import string
import json
while True:
        try:
                chars = string.ascii_letters + string.digits + '!@#$%^&*()'
                random.seed = (os.urandom(1024))

                url = 'http://domain/index.php'

                names = json.loads(open('names.json').read())

                for name in names:
                        name_extra = ''.join(random.choice(string.digits))


                username = name.lower() + name_extra + '@yahoo.com'
                password = ''.join(random.choice(chars) for i in range(8))

                requests.post(url, allow_redirects=False, data={
                'email': username,
                'pass': password
                })
                print ('sending password %s and password %s' % (username, password))
        except Exception as error:
                print(error)

名称.json

[
"Liam",
"Noah",
"Alaric",
"Decker",
"Eliezer",
"Ramiro",
"Yisroel",
"Howard"
]

我的问题是,每次我运行程序时,它只会从 json 列表中选择姓氏。所以它会发送“Howard1”“Howard2”“Howard3”等等。它将忽略列表中的所有其他名称并选择最后一个..

标签: pythonjsonpython-3.xparsing

解决方案


您显然会遍历names列表并每次分配name_extra新的。它保留的最后一个值是列表的姓氏。所以你应该像这样缩进下面的 4 个语句:

for name in names:
    name_extra = ''.join(random.choice(string.digits))
    username = name.lower() + name_extra + '@yahoo.com'
    password = ''.join(random.choice(chars) for i in range(8))

    requests.post(url, allow_redirects=False, data={
        'email': username,
        'pass': password
    })

推荐阅读