Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
22 / 16 / 7
Регистрация: 20.07.2010
Сообщений: 264

Может ли питон залезть на сайт, авторизироваться и скачать файл?

15.04.2020, 18:04. Показов 5890. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ссылка вида:
https://....ru/personal/generate_yml.php?mode=csv

Но при попытке сгенерировать csv, по данной ссылке открывается форма ввода логина и пароля. только после того как ввел, начинается автоматическое скачивание файла.

Можно ли как-то автоматически ввести логин и пароль?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2020, 18:04
Ответы с готовыми решениями:

Как авторизироваться на сайте используя питон 3
Доброго времени суток. Интересно написать парсер, который бы собирал заголовки писем пришедших на мою почту в майле. Вопрос в том, можно...

Пользователь не может авторизироваться. Не понимаю почему
Здравствуйте. Второй день не могу понять в чем неполадка. Я новичок, и возможно чего то очень важного не понимаю. в доменной сети на...

Кто может дать сайт где скачать Delphi 6.0 или скинуть его сюда
Кто может дать сайт где скачать Delphi 6.0 или скинуть его сюда ???? помагите кто может ! За ранее спасибо ! 3.6. Запрещено обсуждение...

13
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.04.2020, 18:12
Можно.
0
22 / 16 / 7
Регистрация: 20.07.2010
Сообщений: 264
15.04.2020, 19:34  [ТС]
Как это сделать?
нашел robobrowser - не работает.

нащел еще requests.get, попробовал написать так:


Python
1
2
3
4
5
6
7
8
9
10
11
import pandas as pd
import requests
 
url = '....generate_yml.php?mode=csv'
login = ''
pswd = ''
 
requests.get(url, auth=(login, pswd))
 
df = pd.read_csv(url, sep=';' , encoding='cp1251')
df.to_csv(r'rezult.csv', index = False, encoding='cp1251', sep=';', decimal=',')
но выдает непонятную ошибку:

<Response [200]>
Traceback (most recent call last):
File "C:/python/python_scripts/woodville.py", line 16, in <module>
df = pd.read_csv(url, sep=';' , encoding='cp1251')
File "C:\Users\\AppData\Local\Programs\Python \Python37\lib\site-packages\pandas\io\parsers.py", line 676, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Users\\AppData\Local\Programs\Python \Python37\lib\site-packages\pandas\io\parsers.py", line 448, in _read
parser = TextFileReader(fp_or_buf, **kwds)
File "C:\Users\\AppData\Local\Programs\Python \Python37\lib\site-packages\pandas\io\parsers.py", line 880, in __init__
self._make_engine(self.engine)
File "C:\Users\\AppData\Local\Programs\Python \Python37\lib\site-packages\pandas\io\parsers.py", line 1114, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "C:\Users\\AppData\Local\Programs\Python \Python37\lib\site-packages\pandas\io\parsers.py", line 1891, in __init__
self._reader = parsers.TextReader(src, **kwds)
File "pandas\_libs\parsers.pyx", line 529, in pandas._libs.parsers.TextReader.__cinit_ _
File "pandas\_libs\parsers.pyx", line 720, in pandas._libs.parsers.TextReader._get_hea der
File "pandas\_libs\parsers.pyx", line 916, in pandas._libs.parsers.TextReader._tokeniz e_rows
File "pandas\_libs\parsers.pyx", line 2063, in pandas._libs.parsers.raise_parser_error
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 25491: character maps to <undefined>

Думал может ошибка в файле - но скачал его руками, пересохранил - все ок
Python
1
2
df = pd.read_csv("ishodniy.csv", sep=';' , encoding='cp1251')
df.to_csv(r'rezult.csv', index = False, encoding='cp1251', sep=';', decimal=',')
Добавлено через 45 минут
Ошибка возникает, даже если убрать
Code
1
requests.get(url, auth=(login, pswd))
т.е. панда не получает доступ к файлу после авторизации почему-то
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.04.2020, 20:02
Цитата Сообщение от nikki4 Посмотреть сообщение
нашел robobrowser - не работает.
нащел еще requests.get, попробовал написать так:
Эти ваши попытки чего-то найти бесполезны без знания того, как работают сайты и какого вида бывает аутентификация.
Параметр auth в requests предназначен для Basic, Digest и OAuth аутентификации.
Очевидно, что ни одна не является вашим случаем.
Использование форм ввода логина и пароля означает использования Form-based authentication.
И она требует другого подхода. Вы должны отправить правильный post запрос с заполненными полями для логина и пароля.
Типа такого:
Python
1
2
3
4
5
6
    data = {
        'session[login]':login,
        'session[password]':password,
    }
    
    r = session.post('{}{}'.format(url,'/sessions'), data=data)
Как это делается разжевывать не буду, ибо на форуме полно примеров. И еще вы должны уметь пользоваться отладчиком браузера, чтобы узнать какие поля нужно заполнять и на какой url слать данные.


Цитата Сообщение от nikki4 Посмотреть сообщение
т.е. панда не получает доступ к файлу после авторизации почему-то
Не было у вас никакой авторизации. pandas скачала не csv, а страницу логина. Что логично.
0
22 / 16 / 7
Регистрация: 20.07.2010
Сообщений: 264
15.04.2020, 22:14  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
import requests
import lxml.html
 
 
url = '/personal/'
 
s = requests.Session()
data = {"loginName":"", "loginPass":""}
r = s.post(url, data=data)
rez = s.get('https:///personal/generate_yml.php?mode=csv')
print(rez)
выдает: <Response [200]>

при попытке загрузить файл, ошибки. Видимо не правильно выше сделал.
в loginName и loginPass
надо ведь айдишники инпутов вводить? или их имена?
USER_LOGIN и USER_PASSWORD
Code
1
<input type="password" class="input-text" id="loginPass" name="USER_PASSWORD" maxlength="255">
Python
1
2
df = pd.read_csv('.../generate_yml.php?mode=csv', sep=';' , encoding='cp1251')
df = pd.read_csv(rez, sep=';' , encoding='cp1251')
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.04.2020, 22:41
Цитата Сообщение от nikki4 Посмотреть сообщение
надо ведь айдишники инпутов вводить? или их имена?
Нужно вводить то, что делает браузер при отправке формы.
Что делает браузер при отправке формы нужно смотреть в отладчике браузера. Отладчик открывается по Ctrl-Shift-I.
0
22 / 16 / 7
Регистрация: 20.07.2010
Сообщений: 264
15.04.2020, 23:00  [ТС]
он много что делает, что конкретно смотреть?

это?
обрезалось

сеть
файл /personal/?login=yes

login "yes"

AUTH_FORM "Y"
TYPE "AUTH"
backurl "/personal/"
USER_LOGIN ""
USER_PASSWORD ""
Login "Войти"

или это?
т.е. имена форм, а не айдишники?

URL запроса:https://.ru/personal/?login=yes
Метод запроса:POST
set cookie: BITRIX_SM_LOGIN=....; expires=Thu, 20-Mar-2025 19:47:51 GMT; Max-Age=155519999; path=/; domain=....ru; HttpOnly
set cookie: BITRIX_SM_SALE_UID=....; expires=Sat, 10-Apr-2021 19:47:51 GMT; Max-Age=31103999; path=/; domain=...ru
с паролем не нашел битриксовое.
попробовал имена. но таже ошибка. панда не качает файл.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
16.04.2020, 07:15
Цитата Сообщение от nikki4 Посмотреть сообщение
т.е. имена форм,
name, ага. А ещё js может перехватывать отправку формы, поэтому и нужно смотреть вкладку "сеть".

Цитата Сообщение от Garry Galler Посмотреть сообщение
в отладчике браузера.
Это не отладчик. Впрочем, пофиг.
0
22 / 16 / 7
Регистрация: 20.07.2010
Сообщений: 264
16.04.2020, 12:39  [ТС]
Хорошо, но я выше написал . что не работает всеравно.
может надо как-то по особому в панду передать?



Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8, -*-
 
import pandas as pd
import requests
import lxml.html
 
 
url = 'https://.....ru/personal/'
 
s = requests.Session()
data = {"USER_LOGIN":"", "USER_PASSWORD":""}
r = s.post(url, data=data)
rez = s.get('https://.ru/personal/generate_yml.php?mode=csv')
df = pd.read_csv('https://.ru/personal/generate_yml.php?mode=csv', sep=';' , encoding='cp1251')
Происходит авторизация на сайте. Response [200]
дальше пытаюсь получить файл, но не выходит.

наверное, это 2 разных сессии и надо по другому ссылку передать?
пробовал так: Может какую-то команду надо к rez добавить?
Python
1
df = pd.read_csv(rez , sep=';' , encoding='cp1251')
Invalid file path or buffer object type: <class 'requests.models.Response'>
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
16.04.2020, 12:41
Лучший ответ Сообщение было отмечено nikki4 как решение

Решение

Святая Селестия, дай мне сил...

Ешь слона по частям. Нафиг панду, сначала надо проверить, что файл скачивается, на что вам намекали. И тело ответа содержится в rez.text
2
22 / 16 / 7
Регистрация: 20.07.2010
Сообщений: 264
16.04.2020, 13:06  [ТС]
Попробовал написать:
print(rez.content)
выдало вообще не пойми что. откуда это не понимаю. это вообще никак не связано с сайтом.
Кликните здесь для просмотра всего текста

value=Контакты пейнтбольного клуба0.67, карта проезда, реквизиты МенюПарк активного отдыха Свяжитесь с нами главная Пейнтбол Страйкбол Лазертаг КвестыПакеты Акции Цены Контакты Активный отдых Лучный �\ xB8 арбалетный тир Веревочн и прочее


Добавлено через 1 минуту
print(rez.text) - показывает менюшку, метрику, но листинга товаров и ссылку на скачивание его в csv нет

Добавлено через 9 минут
изучил содержимое
print(rez.text)
- это страница логина


HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<form name="form_auth" method="post" target="_top" action="/personal/?login=yes" id="formLogIn">
                    <input type="hidden" name="AUTH_FORM" value="Y" />
                    <input type="hidden" name="TYPE" value="AUTH" />
                                            <input type="hidden" name="backurl" value="/personal/" />
                                                            
                    <div class="form-row clearfix">
                        <label class="label-input" for="loginName">E-mail:</label>
                        <input type="text" class="input-text" id="loginName" name="USER_LOGIN" maxlength="255" value="">
                    </div>
                    <!-- /.form-row clearfix -->
                    <div class="form-row clearfix">
                        <label class="label-input" for="loginPass">Пароль: <a class="forgot_pwd" href="/personal/?FORGOT_PWD=Y">или восстановите пароль</a></label>
                        <input type="password" class="input-text" id="loginPass" type="password" name="USER_PASSWORD" maxlength="255">
                    </div>
                    <!-- /.form-row clearfix -->
                    <div class="form-row form-row-last clearfix">
                        <input type="submit" value="Войти" name="Login" class="button">
                    </div>
                    <!-- /.form-row clearfix -->
                </form>
Добавлено через 9 минут
Может помимо логина и пароля надо передать еще другие данные форм?
AUTH_FORM "Y"
TYPE "AUTH"
Login "Войти"

Сработало!!


но не пандится файл
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.04.2020, 13:13
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Это не отладчик
Средства разработчика == средства отладки.
0
22 / 16 / 7
Регистрация: 20.07.2010
Сообщений: 264
16.04.2020, 13:15  [ТС]
Разобрался!

Python
1
2
rez = s.get('https://.ru/personal/generate_yml.php?mode=csv')
df = pd.read_csv(rez.text, sep=';' , encoding='cp1251')
там правда выдает не то и не сохраняет, но это отдельный вопрос.

с этим вопросом решено. оказывается помимо логина и пароля надо вводить другие данные. Но в примерах как пользоваться этой функцией почему-то не было таких примеров. Из-за чего не знал про это
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.04.2020, 13:30
Цитата Сообщение от nikki4 Посмотреть сообщение
оказывается помимо логина и пароля надо вводить другие данные.
Оказывается, не обязательно.
Я столько раз постил примеры аутентификации.
Неужели сложно было поискать?

POST запросы
Selenium Скачивание файлов с сайта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2020, 13:30
Помогаю со студенческими работами здесь

Почтовый клиент не может авторизироваться на сервере с dovecot
На VDS стоит Ubuntu 12.10+Postfix+Dovecot 2.1.7+Postfixadmin. Я человек неопытный, английского не знаю, манов по второму Dovecotу...

Когда Denwer включен и я соединен к интернету то может любой залезть в мой компютер?
Здравствуйте! Мне учитель сказал что при работе с денвером надо отключится от интернета потому что любой может залезть в мой комп порытся в...

Скачать файл загруженный на сайт
Есть обычная форма загрузки файла на сайт(в моем случае в папку т.к пока сайт локальный) она просто выгружает файл в папку. Как сделать так...

Залезть в файл dll
Не знаю в какой раздел поместить свой вопрос, но. Ребят, помогите пожалуйста, у меня есть два файла, .exe и .dll, (трейнер для игры), но...

Как скачать файл excel по ссылке и загрузить в папку на свой сайт
Добрый день, форумчане! Большая просьба помочь решить проблему, которая заключается в следующем: Имеются ссылки на файлы, по которым...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru