Python:如何从方法中的方法传递变量?

时间:2019-05-12 00:24:46

标签: python-3.x python-requests

我正在处理一个脚本,该脚本检查用户名是否在使用Xenforo的大量论坛上被使用。该列表实际上是2个单独的列表,每个Xenforo版本一个(由于每个版本需要略有不同的代码)。

我正在尝试使用具有3种方法的类,而不包括 init 。原谅我,因为这是我第一次使用类。

class Xenforo:

    def __init__(self, name):
        self.name = name

    def iterurl(self, inputfile):
        with open(inputfile, "r") as f:
            for item in f:
                item2 = item.strip()
                payload = {'login':self.name}

                response = requests.post(item2, data=payload)
                soup = BeautifulSoup(response.text, "html.parser")
        return soup

    def check1(self):
        self.iterurl("version1.txt")

        name_result = soup.find("div", class_="blockMessage blockMessage--error blockMessage--iconic").text.strip()

        if name_result == "Incorrect password. Please try again.":
            print("user found")
        elif name_result == "The requested user '"+self.name+"' could not be found.":
            print("user not found")
        else:
            print("possible error")

        print(name_result)

    def check2(self):


        payload = {'login': self.name}

        response = requests.post(self.url, data=payload)
        soup = BeautifulSoup(response.text, "html.parser")
        try:
            name_result = soup.find("div", class_="errorPanel").find("li").text.strip()
            if name_result == "User names must be unique. The specified user name is already in use.":
                print("user found")
            else:
                print("user not found")
        except AttributeError:
            print("user not found")

基本上,我想在check1()和check2()中都使用iterurl(),因为除了文本文件的名称外,代码的前一半是相同的(请记住,我没有为check2重新编写代码) ())。

我不确定是否在check1()中正确调用了iterurl()。最重要的是如何将汤从带有check1()的iterurl()传递到check1内的其余代码?

此代码无法将iterurl中的汤识别为现有的

 name_result = soup.find("div", class_="blockMessage blockMessage--error blockMessage--iconic").text.strip()

我怎样才能通过Python的check1汤?

1 个答案:

答案 0 :(得分:1)

调用iterutil的结果是汤,所以

def check1(self):
    soup = self.iterutil(“version1.txt”)
    soup.foo()
    ....