Python: почему переменная совпадает со строкой, но вывод говорит иначе - PullRequest
1 голос
/ 04 мая 2019

Я делаю простой скрипт, который проверяет, есть ли у пользователя выход из форума.

def xenforo_check():
    url = "http://dfkitcar.com/forum/index.php?login/login"
    name = "JSATX"
    headers = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding':'gzip, deflate', 'Content-Type':'application/x-www-form-urlencoded'}
    payload = {'login':name}

    response = requests.post(url, data=payload)
    soup = BeautifulSoup(response.text, "html.parser")
    name_result = soup.find("div", class_="blockMessage blockMessage--error blockMessage--iconic").text

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

    print(name_result)

xenforo_check()

Для этого примера пользователь существует, поэтому он должен вывести «user found».Вместо этого вывод:

possible error

Incorrect password. Please try again.

Мне кажется, что name_result совпадает с «Неверный пароль. Пожалуйста, попробуйте еще раз».поэтому я ожидаю, что он напечатает «пользователь найден».

То же самое имеет место, если я проверяю имя, которое не выходит.Переменная name_result не совпадает со строкой.Почему это так?

1 Ответ

1 голос
/ 04 мая 2019

Вы правы, name_result кажется таким же, но перед тестированием его для сравнения print его содержимое и посмотрите, как оно действительно выглядит:

>>> print(name_result)
u'\nIncorrect password. Please try again.\n'

Таким образом, это действительно строка unicode, содержащая невидимые символы, а именно символ новой строки '\n', с которым она действительно сравнивается, и поэтому она не совпадает.

Однако, если мы strip() эти символы новой строки из text, вы должны получить ожидаемый результат, поэтому добавьте strip() к этой строке:

name_result = soup.find("div", class_="blockMessage blockMessage--error blockMessage--iconic").text.strip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...