Add files via upload
This commit is contained in:
parent
490af24a18
commit
a624475349
9 changed files with 259 additions and 0 deletions
42
example_show_accessable_pages.py
Normal file
42
example_show_accessable_pages.py
Normal file
|
@ -0,0 +1,42 @@
|
|||
import json
|
||||
from login.login import login
|
||||
from login.close_login_popup import close_login_popup
|
||||
|
||||
from get_tree.get_tree import get_tree
|
||||
|
||||
from getpass import getpass
|
||||
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.firefox.service import Service as FirefoxService
|
||||
from webdriver_manager.firefox import GeckoDriverManager
|
||||
|
||||
list_of_page_ids: list[int] = [59451, 59246]
|
||||
|
||||
base_url: str = "https://www.uni-bremen.de"
|
||||
|
||||
zfn_password: str = getpass()
|
||||
|
||||
with open("username.json", "r") as file:
|
||||
json_dict = json.load(file)
|
||||
zfn_user: str = json_dict["zfn_user"]
|
||||
|
||||
driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))
|
||||
|
||||
# Login
|
||||
if login(driver, base_url, zfn_user, zfn_password) is False:
|
||||
print("Login failed")
|
||||
exit(1)
|
||||
|
||||
# Get rid of the popup
|
||||
close_login_popup(driver)
|
||||
|
||||
# Get the protected URL to the pages
|
||||
page_list = get_tree(driver, base_url)
|
||||
|
||||
for page_entry in page_list:
|
||||
print(page_entry)
|
||||
print("---")
|
||||
|
||||
print("Close shop")
|
||||
driver.close()
|
||||
driver.quit()
|
47
example_surf_to_pages.py
Normal file
47
example_surf_to_pages.py
Normal file
|
@ -0,0 +1,47 @@
|
|||
import json
|
||||
from login.login import login
|
||||
from login.close_login_popup import close_login_popup
|
||||
|
||||
from get_tree.get_layout_url import get_layout_url
|
||||
|
||||
from getpass import getpass
|
||||
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.firefox.service import Service as FirefoxService
|
||||
from webdriver_manager.firefox import GeckoDriverManager
|
||||
|
||||
import time
|
||||
|
||||
list_of_page_ids: list[int] = [59451, 59246]
|
||||
|
||||
base_url: str = "https://www.uni-bremen.de"
|
||||
|
||||
zfn_password: str = getpass()
|
||||
|
||||
with open("username.json", "r") as file:
|
||||
json_dict = json.load(file)
|
||||
zfn_user: str = json_dict["zfn_user"]
|
||||
|
||||
driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))
|
||||
|
||||
# Login
|
||||
if login(driver, base_url, zfn_user, zfn_password) is False:
|
||||
print("Login failed")
|
||||
exit(1)
|
||||
|
||||
# Get rid of the popup
|
||||
close_login_popup(driver)
|
||||
|
||||
# Get the protected URL to the pages
|
||||
page_url_base = get_layout_url(driver, base_url)
|
||||
|
||||
for page_id in list_of_page_ids:
|
||||
print(f"Go to page {int(page_id)}")
|
||||
page_url: str = page_url_base + f"&id={int(page_id)}"
|
||||
driver.get(page_url)
|
||||
print("Wait for 5 sec")
|
||||
time.sleep(5)
|
||||
|
||||
print("Close shop")
|
||||
driver.close()
|
||||
driver.quit()
|
18
get_tree/get_layout_url.py
Normal file
18
get_tree/get_layout_url.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
from selenium import webdriver
|
||||
|
||||
|
||||
def get_layout_url(
|
||||
driver: webdriver.firefox.webdriver.WebDriver,
|
||||
base_url: str,
|
||||
) -> str:
|
||||
data_elements = str(driver.page_source).split('"')
|
||||
|
||||
lost_and_found = []
|
||||
for element in data_elements:
|
||||
if str(element).find("index.php?route=%2Fweb%2Flayout%2F&token=") != -1:
|
||||
lost_and_found.append(element)
|
||||
|
||||
assert len(lost_and_found) > 0
|
||||
page_url = base_url + str(lost_and_found[0]).replace("\\", "")
|
||||
|
||||
return page_url
|
41
get_tree/get_tree.py
Normal file
41
get_tree/get_tree.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
import json
|
||||
from selenium import webdriver
|
||||
|
||||
|
||||
def get_tree(
|
||||
driver: webdriver.firefox.webdriver.WebDriver,
|
||||
base_url: str,
|
||||
) -> list:
|
||||
data_elements = str(driver.page_source).split('"')
|
||||
|
||||
lost_and_found = []
|
||||
for element in data_elements:
|
||||
if (
|
||||
str(element).find(
|
||||
"index.php?route=%2Fajax%2Fpage%2Ftree%2FfetchData&token="
|
||||
)
|
||||
!= -1
|
||||
):
|
||||
lost_and_found.append(element)
|
||||
|
||||
assert len(lost_and_found) == 1
|
||||
ajax_url = base_url + str(lost_and_found[0]).replace("\\", "")
|
||||
|
||||
backup_url = driver.current_url
|
||||
driver.get(ajax_url)
|
||||
|
||||
data = str(driver.page_source)
|
||||
data_lines = data.split('<div id="json">')
|
||||
|
||||
assert len(data_lines) == 2
|
||||
data = data_lines[1]
|
||||
|
||||
data_lines = data.split("</div>")
|
||||
assert len(data_lines) > 0
|
||||
data = data_lines[0]
|
||||
|
||||
page_dict = json.loads(data)
|
||||
|
||||
driver.get(backup_url)
|
||||
|
||||
return page_dict
|
3
login/close_login_popup.json
Normal file
3
login/close_login_popup.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"button_class": "t3js-modal-close close"
|
||||
}
|
26
login/close_login_popup.py
Normal file
26
login/close_login_popup.py
Normal file
|
@ -0,0 +1,26 @@
|
|||
import json
|
||||
import os
|
||||
import time
|
||||
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.common.by import By
|
||||
|
||||
|
||||
def close_login_popup(driver: webdriver.firefox.webdriver.WebDriver):
|
||||
string_json_path: str = os.path.join("login", "close_login_popup.json")
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
with open(string_json_path, "r") as file:
|
||||
string_dict = json.load(file)
|
||||
|
||||
evil_element_found: bool = True
|
||||
while evil_element_found is True:
|
||||
found_element_list = driver.find_elements(By.TAG_NAME, "button")
|
||||
evil_element_found = False
|
||||
for found_element in found_element_list:
|
||||
if found_element.get_dom_attribute("class") == string_dict["button_class"]:
|
||||
evil_element_found = True
|
||||
found_element.click()
|
||||
time.sleep(1)
|
||||
break
|
7
login/login.json
Normal file
7
login/login.json
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"login_url": "/typo3/index.php?route=%2Flogin",
|
||||
"user_name_id": "t3-username",
|
||||
"user_password_id": "t3-password",
|
||||
"user_button_id": "t3-login-submit",
|
||||
"bad_url": "/typo3/index.php?loginProvider="
|
||||
}
|
72
login/login.py
Normal file
72
login/login.py
Normal file
|
@ -0,0 +1,72 @@
|
|||
import json
|
||||
import os
|
||||
import time
|
||||
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.common.by import By
|
||||
|
||||
|
||||
def login(
|
||||
driver: webdriver.firefox.webdriver.WebDriver,
|
||||
base_url: str,
|
||||
zfn_user: str,
|
||||
zfn_password: str,
|
||||
) -> bool:
|
||||
assert len(base_url) > 0
|
||||
assert len(zfn_user) > 0
|
||||
assert len(zfn_password) > 0
|
||||
|
||||
string_json_path: str = os.path.join("login", "login.json")
|
||||
|
||||
with open(string_json_path, "r") as file:
|
||||
string_dict = json.load(file)
|
||||
|
||||
login_url: str = base_url + string_dict["login_url"]
|
||||
|
||||
# Login
|
||||
driver.get(login_url)
|
||||
print_new_line: bool = False
|
||||
while driver.current_url != login_url:
|
||||
print(".", end="")
|
||||
time.sleep(1)
|
||||
print_new_line = True
|
||||
|
||||
if print_new_line is True:
|
||||
print()
|
||||
|
||||
login_name_list = driver.find_elements(By.ID, string_dict["user_name_id"])
|
||||
login_password_list = driver.find_elements(By.ID, string_dict["user_password_id"])
|
||||
login_button_list = driver.find_elements(By.ID, string_dict["user_button_id"])
|
||||
|
||||
if (
|
||||
(len(login_name_list) != 1)
|
||||
and (len(login_password_list) != 1)
|
||||
and (len(login_button_list) != 1)
|
||||
):
|
||||
return False
|
||||
|
||||
login_name = login_name_list[0]
|
||||
login_password = login_password_list[0]
|
||||
login_button = login_button_list[0]
|
||||
|
||||
while (login_name.get_attribute("value") != zfn_user) or (
|
||||
login_password.get_attribute("value") != zfn_password
|
||||
):
|
||||
login_name.clear()
|
||||
login_password.clear()
|
||||
login_name.send_keys(zfn_user)
|
||||
login_password.send_keys(zfn_password)
|
||||
|
||||
login_button.click()
|
||||
while driver.current_url == login_url:
|
||||
print(".", end="")
|
||||
time.sleep(1)
|
||||
print_new_line = True
|
||||
|
||||
if print_new_line is True:
|
||||
print()
|
||||
|
||||
if str(driver.current_url).startswith(base_url + string_dict["bad_url"]) is True:
|
||||
return False
|
||||
|
||||
return True
|
3
username.json
Normal file
3
username.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"zfn_user": "myusername"
|
||||
}
|
Loading…
Reference in a new issue