requests возвращает код, но токен там пустой
У меня есть такой код:
import requests
header = {'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"}
r = requests.get("https://santehnika1.ru/personal/", headers=header)
print("Done!")
print(r.text)
В r.text он мне возвращает код страницы, но токен там пустой. Однако, если самому зайти на сайт, то токен будет, то есть это выглядит вот так:
<input type="hidden" id="token_check" name="token_check" value="" />
а должно:
<input type="hidden" id="token_check" name="token_check" value="50022" />
вот сайт: https://santehnika1.ru
Что я делаю не так?
Ответы (2 шт):
Автор решения: Jack_oS
→ Ссылка
import requests
url = 'https://santehnika1.ru/personal/'
header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'}
r = requests.get(url, headers=header)
a = r.text.find("token_check').val('")
b = r.text.find("');\n});\n</script>")
token_check = r.text[a+19:b]
в переменной token_check будет строка с номером токена:
>>> token_check
64915
Автор решения: gil9red
→ Ссылка
Вытаскивание токена через регулярное выражение:
import re
import requests
header = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
}
r = requests.get("https://santehnika1.ru/personal/", headers=header)
print("Done!")
# print(r.text)
m = re.search(r"\$\('#token_check'\).val\('(.+?)'\);", r.text)
token_check = m.group(1)
print(token_check)
# 40869
Токен вытаскивается этой строкой (.+?), а \ нужны для экранирования, т.к. $, ( и ) являются мета-символами регулярного выражения