Не так давно я решил расширить свой словарный запас и найти для этого отличный сайт - Memrise.Я подумал, что это здорово, потому что вы можете сами создать новый набор слов и точно узнать, что вам нужно.Но затем возникла проблема - добавление новых слов занимает слишком много времени, поэтому я решил создать скрипт Python, который будет автоматически добавлять слова из словаря (например, текстовый файл, который выглядит как перевод слов) на веб-сайт.Для этой цели я использовал библиотеку запросов.Первое, что мне нужно сделать - это зайти на сайт.Следующее, что мне нужно сделать, это перейти на страницу редактирования и установить запрос на публикацию с данными о слове, который выглядит так:
columns {"1":"hi","2":"hello"}
level_id 8301249
Где слово находится в разделе столбцов, а уровень идентификатора -это идентификатор конечно.Но когда я попытался отправить его, я получил ответ, что куки отключены в вашем браузере.Я попытался отправить запрос на публикацию, как написано здесь: В вашем браузере должны быть включены файлы cookie [Python Requests] , но это не помогает. Также я добавил объект request.Session()
, но это не так.тоже не поможет.Я думал, что проблема может быть вызвана из-за неполных заголовков, которые я отправляю с запросом, поэтому я добавил User-agent, но это тоже не помогает.Может быть эта ошибка как-то связана с ajax
запросом?Я видел, что одним из решений является использование механизации, но есть ли способ сделать такую работу с библиотекой requests
python.Кроме того, я не могу понять, почему я смог войти на веб-страницу (в этом процессе тоже нужны файлы cookie), но не могу отправить запрос на публикацию?Вот мой код:
import requests
session_requests = requests.Session()
session_requests.headers.update({'User-Agent':'Mozilla/5.0 (X11; Linux x86_64...) Gecko/20100101 Firefox/60.0'})
#url of login page
login_url = "https://www.memrise.com/login/"
session_requests.get(login_url)
#one of three required parameters sending by login request ( 1 - username , 2 - password , 3 - csrftoken )
csrftoken = session_requests.cookies["csrftoken"]
#data for login request
data = {
"username": "example@email.com",
"password": "123456789",
"csrfmiddlewaretoken": csrftoken
}
#url of course i want add words to
edit_course_url = 'https://www.memrise.com/course/2253971/example-course/edit/#l_8308032'
#login post request
loged_in = session_requests.post(
login_url,
data = data,
headers = dict(referer=login_url)
)
#trying to enable cookies
edit = session_requests.get(edit_course_url)
cookies = dict(edit.cookies)
cookies['CSRFToken'] = cookies.pop('csrftoken')
#structure of new word , should be send
new_word = {
'columns':{"1":"hi","2":"ro"},
'level_id':'8308032'
}
add_word = session_requests.post(
#Request URL
'https://www.memrise.com/ajax/level/thing/add/',
data=new_word,
#reference to the site taken from post request , sended from browser
headers =dict(referer='https://www.memrise.com/course/2253971/example-course/edit/'),
cookies = cookies
)
print(loged_in.status_code , loged_in.reason)
print(add_word.status_code , add_word.reason
)