予約が必要な状況に遭遇したかもしれませんが、無料のチケットはありません。外国のパスポートを取得する例を使用して、待機プロセスを自動化する方法に関する記事。
パスポートの電子申請が承認された後、書類の原本を持参して写真を撮るために、個人訪問の予約をする必要があります。異なる時間に数日間公共サービスに行ったところ、無料のクーポンは見つかりませんでした。そんな宝くじを続けたくなかった。
解決策は非常に簡単です。ユーザーが地図上の住所を選択すると、利用可能な訪問時間を返すリクエストが送信されます。開発者コンソールに表示されます。そこから、URLとパラメーターについて学習します。
def send_post(cookies):
url = 'https://www.gosuslugi.ru/api/lk/v1/equeue/agg/slots'
headers = {'Content-type': 'application/json;charset=UTF-8', 'Accept':'application/json', 'Cookie':cookies}
payload = {'eserviceId':'','serviceId':[''],'organizationId':[''],'parentOrderId':'','serviceCode':'','attributes':[]}
return post(url, data=dumps(payload), headers=headers)
問題が発生します。正常な応答を受信するには、Cookieをリクエストに追加する必要があります。それらは同じリクエストからコピーできます。しかし、それらは数時間しか機能しません。したがって、エラー(401)を受け取った場合、承認を渡し、新しいCookieをコピーして、ファイルに保存します。空き容量が見つかったら、ブラウザを開いてこのページに移動します。
実装には、Python、Selenium、およびWindowsタスクスケジューラが必要です。したがって、次のメインコードを取得します。
from webbrowser import open as open_tab
from selenium import webdriver
from datetime import datetime
from requests import post
from json import dumps
from os import path
def main():
response = send_post(read_cookies())
if response.status_code == 401:
write_cookies(get_cookies())
write_log(' 401. .')
main()
return
elif response.status_code == 200:
length = len(response.json()['slots'])
if length > 0:
write_log(' : ' + length)
open_tab(TARGET_LINK, new=1)
else:
write_log(' ')
else:
write_log(' {0}'.format(response.status_code))
Seleniumを使用してCookieを取得するには、ログインページに移動し、入力フィールドを見つけて、パスワードを使用してログインを挿入します。実際には、ウィンドウモードなしでログインすることはできませんでした。したがって、数時間ごとにブラウザウィンドウが数秒間表示されます。必要なCookieのセットを取得するには、部門のアドレスが選択されているページに移動しますTARGET_LINK
。
def get_cookies():
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--minimal')
driver = webdriver.Chrome(executable_path=DRIVER_FILE, options=options)
driver.get('https://esia.gosuslugi.ru/')
driver.implicitly_wait(7)
input_login = driver.find_element_by_id('login')
input_password = driver.find_element_by_id('password')
btn_enter = driver.find_element_by_id('loginByPwdButton')
input_login.send_keys(LOGIN)
input_password.send_keys(PASSWORD)
btn_enter.click()
driver.get(TARGET_LINK)
cookies = driver.get_cookies()
driver.close()
return cookies
リクエストの場合、Cookieは次のようにフォーマットされます =;
raw_cookies = ''.join(['{}={}; '.format(i['name'], i['value']) for i in cookies])
Windowsタスクスケジューラを構成する必要があります。スクリプトを.py
直接実行することに成功しませんでした。したがって、.bat
1つのコマンドを介してpython "script.py"
。はい、これによりコンソールウィンドウが開きます。コンソールを密かに起動できる外部プログラムがあります。
その結果、3日目と17時頃に240回の打ち上げがあり、録音用の空きスペースがありました。さらに進んで、その後のリクエストで自動録音できると思います。