Использование python для очистки сайта (без формы, сеансовые куки) - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь очистить сайт, для которого у меня есть законный логин. Когда вы пытаетесь посетить этот сайт, вы будете перенаправлены на Verify.aspx, пока не введете допустимое значение для access-code. Используя библиотеку requests для Python, я попробовал следующее:

url1 = "<url>/Verify.aspx"
payload = {"access-code": "xxxxxxxx" }
ses = requests.Session()
r = requests.get(url1, data=payload)

Когда я смотрю на значение или r.cookies, я вижу, что я взял кучу файлов cookie, которые хранятся в банке для файлов cookie:

<RequestsCookieJar[Cookie(version=0, name='ASP.NET_SessionId', value='...)]>

На данный момент я хотел бы сохранить информацию о сеансе и включить ее в будущие запросы. Например, ниже, я хотел бы просмотреть обычную страницу (т.е. home), поэтому я пытаюсь зайти на страницу и отправить файлы cookie вместе.

test = ses.post('<url>/home', cookies= r.cookies)

Однако на этом этапе, когда я смотрю на test.text в python, я вижу по коду, который я только что перенаправил обратно на исходную страницу Verify.aspx.

Я довольно много гуглил, но безуспешно. У меня есть знакомство с Python, но я ничего не могу сказать об этом. Я бы на самом деле предпочел и решение R, так как я лучше с ним, но мне кажется, что библиотеки очистки Python лучше, чем пакеты R. Я не хочу использовать что-то вроде Selenium, кроме как через Python или R, поскольку я хочу получать и обрабатывать данные без какого-либо взаимодействия с пользователем.

Я чувствую себя застрявшим - я знаю, что передаю законный код и получаю действительные сессионные куки-файлы, так как могу нормально входить через обычную веб-страницу. Я просто не знаю, как собирать, сохранять и передавать информацию о cookie-файлах сессии на страницу во время последующих вызовов URL.

Все, что я прочитал, указывает на то, что библиотека requests должна обрабатывать все, что касается файлов cookie, но я думаю, что я просто передаю их неправильно.

Может кто-нибудь подсказать, что я мог бы попробовать дальше?

#

EDIT Спасибо за поиск, @Faboor. Я думаю, что нахожусь на лучшем пути, так как теперь у меня другое сообщение об ошибке. Теперь, когда я смотрю на содержимое print(test.text), оно говорит: «Ваш браузер отправил запрос, который этот сервер не может понять». Это нормально, что второй URL-адрес, к которому я пытаюсь получить доступ, не является отдельной страницей (то есть она выглядит как папка, а не как что-то вроде index.html)?

1 Ответ

0 голосов
/ 09 мая 2019

В вашем примере вы создаете сеанс, но не используете его для входа в систему.Предполагая, что это всего лишь проблема с использованием файлов cookie, использование ses.get и ses.post вместо requests.get должно решить вашу проблему.

url1 = "<url>/Verify.aspx"
payload = {"access-code": "xxxxxxxx" }
ses = requests.Session()
r = ses.get(url1, data=payload)
test = ses.post('<url>/home')

Вы можете проверить, какие файлы cookie хранятся в сеансе, используя ses.cookies.Или для лучшей читабельности (несмотря на потерю некоторой информации о происхождении файлов cookie) вы можете использовать dict(ses.cookies)

Для получения дополнительной информации о сеансах запросов ознакомьтесь с документами расширенного использования

...