Ensimmäinen versio
This commit is contained in:
commit
64a1c97e74
13
README.md
Normal file
13
README.md
Normal file
@ -0,0 +1,13 @@
|
||||
# poiminta.py
|
||||
|
||||
Tämä skripti hakee kuksasta sähköpostit joko perhetiedotteeseen tai
|
||||
johtajatiedotteeseen. Se on historiallisesti toiminut luotettavammin kuin kuksa
|
||||
itse, niin oudolta kuin se kuulostaakin, mutta koska se perustuu kuksan
|
||||
käyttöliittymän tunnisteisiin, se saattaa hajota milloin tahansa.
|
||||
|
||||
Käyttääksesi skriptiä tarvitset pythonin, seleniumin pythonille, firefoxin ja
|
||||
geckodriverin. Skripti poimii sähköpostit perhetiedotteeseen, jos sille ei anna
|
||||
mitään argumentteja, ja johtajatiedotteeseen, jos sille antaa argumentiksi `jt`
|
||||
tai `johtajatiedote`. Kun ajat skriptin, se avaa ensin kuksan kirjautumissivun,
|
||||
johon joudut kirjautumaan käsin (ks. skriptin koodi jos haluat automatisoida
|
||||
tämän). Tämän jälkeen se poimii sähköpostit ja tulostaa ne.
|
61
poiminta.py
Executable file
61
poiminta.py
Executable file
@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
import time
|
||||
import os
|
||||
import sys
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.common.keys import Keys
|
||||
from selenium.common.exceptions import NoSuchElementException
|
||||
|
||||
if "help" in sys.argv or "h" in sys.argv or "-h" in sys.argv or "--help" in sys.argv:
|
||||
print(f"""{sys.argv[0]} [jt|johtajatiedote]
|
||||
Hakee kuksasta sähköpostit joko perhe- tai johtajatiedotteeseen. Oletuksena perhetiedote.""")
|
||||
sys.exit(0)
|
||||
|
||||
def find_element(by, something):
|
||||
"""
|
||||
Try driver.find_element until the element is found.
|
||||
Make sure the element eventually appears or this can stall for ever.
|
||||
"""
|
||||
try:
|
||||
return driver.find_element(by, something)
|
||||
except NoSuchElementException:
|
||||
time.sleep(1)
|
||||
return find_element(by, something)
|
||||
|
||||
driver = webdriver.Firefox()
|
||||
emails = []
|
||||
|
||||
driver.get("https://kuksa.partio.fi")
|
||||
|
||||
# This is my (slaesvuo) way to implement unattended login and probably will not
|
||||
# work for you as is
|
||||
#passwd = os.popen("pass show web/id.partio.fi | head -n 1").read()
|
||||
#username_field = find_element(By.ID, 'username')
|
||||
#username_field.send_keys("saku-laesvuori" + Keys.TAB + passwd + Keys.ENTER)
|
||||
|
||||
find_element(By.ID, 'sivu_poiminta').click()
|
||||
|
||||
if "johtajatiedote" in sys.argv or "jt" in sys.argv:
|
||||
find_element(By.ID, 'cphContent_IYleiset').click()
|
||||
birthdate_upper_bound_input = find_element(By.ID, 'cphContent_TAHSyntymaaika2_txtPvm')
|
||||
birthdate_upper_bound_input.send_keys("31.12.2008" + Keys.ENTER)
|
||||
else:
|
||||
find_element(By.ID, 'cphContent_iJasenyys').click()
|
||||
find_element(By.ID, 'cphContent_chkMyosJasenenHuoltajat').click()
|
||||
|
||||
find_element(By.ID, 'cphContent_btnPoimi').click()
|
||||
|
||||
while True:
|
||||
find_element(By.CSS_SELECTOR, 'tbody') # Wait for the table to be loaded
|
||||
emails += [x.text for x in driver.find_elements(By.CSS_SELECTOR, 'tr > td:nth-child(5)')]
|
||||
nextLink = find_element(By.XPATH, "//span[@id='cphContent_dpPoiminta']/a[text()='>']")
|
||||
if nextLink.get_attribute("class") == "aspNetDisabled":
|
||||
break
|
||||
nextLink.click()
|
||||
|
||||
for email in {x.lower() for x in emails}:
|
||||
if email != "":
|
||||
print(email)
|
||||
|
||||
driver.close()
|
Loading…
Reference in New Issue
Block a user