from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from neo4j import GraphDatabase uri = "bolt://localhost:7687" userName = "neo4j" password = "org" graphDB_Driver = GraphDatabase.driver(uri, auth=(userName, password)) projekte = "https://dobby.ppi.int/cgi-bin/ad/adgroups.pl?ou=Projekte" driver = webdriver.Firefox() driver.get(projekte) table = driver.find_element("xpath", "/html/body/div/div/table[2]") groupsPpiX = [] for row in table.find_elements("xpath", ".//tr[not(position()=1)]"): try: groupId = row.find_element("xpath", ".//td[1]").text groupDesc = row.find_element("xpath", ".//td[2]").text if groupId[:8] == 'prj_ppix': groupsPpiX.append([groupId, groupDesc]) except NoSuchElementException: print("NoSuchElementException") driver.close() driver = webdriver.Firefox() personen = set() for group, groupDesc in groupsPpiX: driver.get("https://dobby.ppi.int/cgi-bin/ad/adgroups.pl?group=" + group) table = driver.find_element("xpath", "/html/body/div/div/table[2]/tbody") personenInGruppe = [] for row in table.find_elements("xpath", ".//tr[not(position()=1)]"): try: kuerzel = row.find_element("xpath", ".//td[1]").text name = row.find_element("xpath", ".//td[2]").text personenInGruppe.append([kuerzel, name]) personen.add(kuerzel) except NoSuchElementException: print("NoSuchElementException") with graphDB_Driver.session() as graphDB_Session: #Gruppe anlegen graphDB_Session.run("""CREATE (:ADGROUP {name: $name})""", name=group) #Personen zur Gruppe verknüpfen for kuerzel, name in personenInGruppe: g = graphDB_Session.run("""MATCH (u:USER) WHERE u.displayName = $displayName RETURN u.kuerzel""", displayName=name).values() if g: #Person existiert for item in g: if not item[0]: #Attribut existiert nicht graphDB_Session.run("""MATCH (u:USER) WHERE u.displayName = $displayName SET u.kuerzel = $kuerzel""", displayName=name, kuerzel=kuerzel) else: #Person existiert nicht #print(name, 'existiert nicht') graphDB_Session.run("""CREATE (u:USER {displayName: $displayName, kuerzel: $kuerzel})""", displayName=name, kuerzel=kuerzel) # Gruppenbeziehung anlegen graphDB_Session.run("MATCH (grp:ADGROUP {name: $name}), (u:USER {displayName: $displayName}) MERGE (u)-[:is_member]->(grp)", name=group, displayName=name) driver.close() driver = webdriver.Firefox() with graphDB_Driver.session() as graphDB_Session: for kuerzel in personen: driver.get("https://dobby.ppi.int/cgi-bin/ad/adgroups.pl?user=" + kuerzel) field = driver.find_element("xpath", "/html/body/div/div/table[2]/tbody/tr[7]/td[2]") for team in field.text.split('\n'): graphDB_Session.run("MERGE (t:TEAMS {name: $name})", name=team) graphDB_Session.run("MATCH (t:TEAMS {name: $name}), (u:USER {kuerzel: $kuerzel}) MERGE (u)-[:is_member]->(t)", name=team, kuerzel=kuerzel) driver.close() # Personen unter Sascha, die nicht in dem Teams Kanal WS_PPI_X sind with graphDB_Driver.session() as graphDB_Session: g = graphDB_Session.run("""MATCH (s:USER {displayName: "Sascha Däsler"}) -[:vorgesetzter*]-> (u:USER) MATCH (ad:TEAMS {name: "WS_PPI_X"}) WHERE not (u) -[:is_member]-> (ad) CALL {with u match (v:USER) -[:vorgesetzter]-> (u) return v.displayName as vorgesetzter} RETURN vorgesetzter, u.jobTitle, u.displayName ORDER BY vorgesetzter, TOLOWER(u.jobTitle), u.displayName""").values() g # Personen unter Sascha, die nicht in der AD Gruppe prj_ppix sind with graphDB_Driver.session() as graphDB_Session: g = graphDB_Session.run("""match (s:USER {displayName: "Sascha Däsler"}) -[:vorgesetzter*]-> (u:USER) match (ad:ADGROUP {name: "prj_ppix"}) where not (u) -[:is_member]-> (ad) call {with u match (v:USER) -[:vorgesetzter]-> (u) return v.displayName as vorgesetzter} RETURN vorgesetzter, u.jobTitle, u.displayName ORDER BY vorgesetzter, TOLOWER(u.jobTitle), u.displayName""").values() g