Пытаюсь сделать скрипт для ежедневного автоматизированного скачивания видео и таймлапса с данного сервиса. Сайт https://webglazok.com/my логин demo@webglazok.com пароль demo Скрипт делаю на питоне, он вроде бы логинится, выводит список камер, привязанных к аккаунту, выводит их параметры, но при попытке скачивания таймлапса скачивает коротенькое видео с надписью "Необходима авторизация". Посоветуйте, что я делаю не так? ВОт скрипт: Код (Text): import requests import json r = requests.post('https://webglazok.com/api/login', data = {'login':'demo@webglazok.com','password':'demo' }) data =r.json() print(data) sessionid=data["wgsession"] tokenid=data["wgtoken"] print("wgsession: "+sessionid) print("wgtoken: "+tokenid) r = requests.get('https://webglazok.com/api/device',headers={'wgtoken': tokenid}) devices = r.json() for device in devices: device_id = device["id"] print(device["name"]+" "+str(device_id)+" "+device["host"]) r = requests.get('[URL]https://'+device[/URL]["host"]+'/api/timelapse', data = { 'dev_id':device_id, 'session':sessionid, 'timestamp_from':'1595869080', 'timestamp_to':'1595955547', 'hour_from':'9', 'hour_to':'18', 'interval':'0', 'download_id':'vwf65ahhzv0i3uxv', 'save':'1'},headers={'wgtoken': tokenid}) with open('gggggggg.mp4', 'wb') as fd: for chunk in r.iter_content(chunk_size=128): fd.write(chunk)
Я бы посоветовал копнуть в сторону ole-автоматизации браузеров (в хроме и файрфоксе она точно есть) и делать подобные штуки через нее.
Нук-нук? Я думал, что только осел поддерживает автоматизацию через COM. --- Сообщение объединено, 29 июл 2020 --- Зачем, если у сайта есть апи?
Два раза ткнул и оба раза попал ничего этого не сделал, вечером исправлюсь. --- Сообщение объединено, 29 июл 2020 --- Selenium?
Сегодня кука может иметь одно название, завтра другое. Сегодня интерфейс сайта может иметь один вид, завтра другой. Это абсолютно одно и тоже.
и куки сделал и юзерагента тоже. Ни фига. Кстати, судя по трафику с fiddlera, куки не используются, если я правильно понял. Сейчас скрипт такой: Код (Text): import requests import json r = requests.post('https://webglazok.com/api/login', data={'login': 'demo@webglazok.com', 'password': 'demo'}) data = r.json() print(data) sessionid = data["wgsession"] tokenid = data["wgtoken"] cook = r.cookies print("wgsession: " + sessionid) print("wgtoken: " + tokenid) r = requests.get('https://webglazok.com/api/device', headers={'wgtoken': tokenid, 'User-Agent':'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36'}, cookies = cook) devices = r.json() for device in devices: # print(device) device_id = device["id"] print(device["name"] + " " + str(device_id) + " " + device["host"]) r = requests.get('https://' + device["host"] + '/api/timelapse', data={'dev_id': device_id, 'session': sessionid, 'timestamp_from': '1595869080', 'timestamp_to': '1595955547', 'hour_from': '9', 'hour_to': '18', 'interval': '0', 'download_id': 'vwf65ahhzv0i3uxv', 'save': '1'}, headers={'wgtoken': tokenid, 'User-Agent':'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36'}, cookies = cook) with open(device["name"]+'.mp4', 'wb') as fd: for chunk in r.iter_content(chunk_size=128): fd.write(chunk)
может есть смысл wireshark поставить и посмотреть что реально передается? можно плагин seleniuma в браузер кинуть и записать обращение, посмотреть, как оно отработает или нет спустя скажем 10-15 минут. Таймстэмп в нужном формате уходит?
f13nd, так там разве агент какой ставиться? стандартная браузерная фигня, ваершарк при скармливании сертификата все прекрасно видит. Ваершарк давно всё умеет. Preference → Protocol → SSL или TLS ссылок по этому добру от хабра до ютуба
Смотрел трафик fiddler-ом и wireshark-ом. Также пробовал в хроме через режим разработчика смотреть, что генерируют скрипты и какой запрос в итоге получается. Также там и заголовки видно. Повторил все в скрипте - результат тот же самый. С виду все идеально, но что-то видимо не так.
куков не вижу в трафике, а юзерагента да. Код (Text): import time import requests url = 'https://webglazok.com' user_agent_val = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' session = requests.Session() r = session.get(url, headers={'User-Agent': user_agent_val}) session.headers.update({'Referer': url}) session.headers.update({'User-Agent': user_agent_val}) r = session.post(url + '/api/login', data={'login': 'demo@webglazok.com', 'password': 'demo'}) data = r.json() print(data) sessionid = data["wgsession"] tokenid = data["wgtoken"] r = session.get(url + '/api/device', headers={'wgtoken': tokenid, 'User-Agent': user_agent_val}) devices = r.json() for device in devices: device_id = device["id"] print(device["name"] + " " + str(device_id) + " " + device["host"]) r = session.get('https://' + device["host"] + '/api/timelapse', data={'dev_id': device_id, 'session': sessionid, 'timestamp_from': time.time() - 60 * 60 * 1, 'timestamp_to': time.time(), 'hour_from': '9', 'hour_to': '18', 'interval': '0', 'download_id': 'vwf65ahhzv0i3uxv', 'save': '1'}, headers={'wgtoken': tokenid, 'User-Agent': user_agent_val}) with open(device["name"] + str(time.time()) + '.mp4', 'wb') as fd: for chunk in r.iter_content(chunk_size=128): fd.write(chunk)