Remove examples.py from repository
This commit is contained in:
parent
320595a948
commit
39f4e9bf6c
122
examples.py
122
examples.py
@ -1,122 +0,0 @@
|
||||
from srgweb.triton import (
|
||||
triton_session,
|
||||
list_programs,
|
||||
get_program,
|
||||
list_baskets,
|
||||
get_basket
|
||||
)
|
||||
import keyring
|
||||
|
||||
# login to triton
|
||||
sess = triton_session("uskov", keyring.get_password("PLAN_SRG", ""))
|
||||
# list available programs
|
||||
programs = list_programs(sess)
|
||||
# download program SRGA
|
||||
df = get_program(sess, program="SRGA")s
|
||||
# list available baskets
|
||||
baskets = list_baskets(sess)
|
||||
# download basket ART-XC agns
|
||||
df_basket = get_basket(sess, basket='ART-XC agns')
|
||||
|
||||
|
||||
|
||||
|
||||
# Publications
|
||||
|
||||
from srgweb.publications import get_df_from_srg_papers
|
||||
|
||||
df = get_df_from_srg_papers()
|
||||
|
||||
from srgweb.artsurvey import (
|
||||
artsurvey_session,
|
||||
get_artsurvey_cat
|
||||
)
|
||||
import keyring
|
||||
sess = artsurvey_session(
|
||||
"uskov",
|
||||
keyring.get_password("SRG_ARTSURVEY", ""),
|
||||
base_url="http://10.5.2.25/"
|
||||
)
|
||||
|
||||
base_url = sess.base_url
|
||||
settings_url = f"{base_url.rstrip('/')}/artsurvey"
|
||||
|
||||
resp = sess.get(settings_url)
|
||||
from bs4 import BeautifulSoup
|
||||
soup = BeautifulSoup(resp.text, "html.parser")
|
||||
|
||||
form = soup.find("form")
|
||||
|
||||
|
||||
select = form.find("select", {"id": "id_survey"})
|
||||
|
||||
|
||||
survey_options = {
|
||||
option.text.strip(): option.get("value")
|
||||
for option in select.find_all("option")
|
||||
if option.get("value")
|
||||
}
|
||||
|
||||
|
||||
# 3. Объединяем параметры
|
||||
params = {**default_artsurvey_settings(), **{}}
|
||||
params["survey"] = survey_options['S1-5v12345.12']
|
||||
|
||||
# 4. Подготовка payload (фильтры, которые реально присутствуют в форме)
|
||||
from bs4 import BeautifulSoup, Tag
|
||||
import requests
|
||||
|
||||
def build_payload(form: Tag, overrides: dict[str, str]) -> dict[str, str]:
|
||||
"""
|
||||
Собирает payload **из всех** полей формы + перекрывает overrides.
|
||||
Поведение 1-в-1 как rvest::html_form_set().
|
||||
"""
|
||||
payload: dict[str, str] = {}
|
||||
|
||||
for el in form.find_all(["input", "select", "textarea"]):
|
||||
name = el.get("name")
|
||||
if not name:
|
||||
continue
|
||||
|
||||
tag_type = el.get("type", "").lower()
|
||||
value: str
|
||||
|
||||
# --- SELECT -------------------------------------------------
|
||||
if el.name == "select":
|
||||
selected = el.find("option", selected=True)
|
||||
value = selected.get("value") if selected else el.find("option").get("value", "")
|
||||
|
||||
# --- CHECKBOX / RADIO --------------------------------------
|
||||
elif tag_type in {"checkbox", "radio"}:
|
||||
# rvest кладёт "" для НЕотмеченных чекбоксов
|
||||
if el.has_attr("checked"):
|
||||
value = el.get("value", "on") # если нет value, браузеры шлют "on"
|
||||
else:
|
||||
value = ""
|
||||
|
||||
# --- TEXT, NUMBER, HIDDEN, и проч. INPUT -------------------
|
||||
else:
|
||||
value = el.get("value", "")
|
||||
|
||||
payload[name] = value
|
||||
|
||||
# Перекрываем пользовательскими значениями
|
||||
payload.update(overrides)
|
||||
return payload
|
||||
|
||||
payload = build_payload(form, params)
|
||||
payload
|
||||
|
||||
|
||||
|
||||
resp = sess.post(
|
||||
settings_url,
|
||||
data=payload,
|
||||
headers={"Referer": "http://10.5.2.25/login"}, # <- критично
|
||||
)
|
||||
|
||||
from urllib.parse import urlencode
|
||||
print(urlencode(payload, doseq=True))
|
||||
|
||||
resp.raise_for_status()
|
||||
|
Loading…
x
Reference in New Issue
Block a user