Мне нужна помощь в определении лучшего «питонического» метода для этого и, если возможно, объяснения того, что делается.
Я написал скрипт, который просматривает список и проверяет наш портал, существует ли пользователь. Если это не так, он возвращает значение, которое мне нужно очистить от нашего дБ. Я извлекаю данные из файла CSV, который в настоящее время имеет только один столбец, которые являются именами пользователей, которые я ищу. Я хочу добавить второй столбец, который содержит числовое значение портала, в котором находятся пользователи. Этот список будет упорядочен по восходящей зоне, поэтому сначала будет показан 1, затем в конечном итоге 2 и т. Д.
Каждая «Зона» использует один и тот же URL, но мой логин меняется для каждого. Примером этого является. Хотя пароль для всех одинаков.
Зона 1 - myusername
Зона 2 - myusername2
Зона 3 - myusername3
Зона 99 - myusernameh
Моя конечная цель здесь состоит в том, чтобы, когда мой сценарий распознал, что «зона» изменилась с 1 на 2, он выходит из системы по URL, входит в систему с именем пользователя, связанным с этой зоной, и повторяет процесс, пока не завершит проверку все зоны. Если возможно, мне бы хотелось, чтобы он также распечатывал каждую 1000-ю строку, и таким образом, если по какой-либо причине возникает сбой, я могу перезапустить его, основываясь на последней 1000-й строке, которую он распечатал.
Ниже мой текущий код:
#!/usr/local/bin/python3
# Check User in CP against DB
import getpass
import time
from selenium import webdriver
import base64
import csv
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.select import Select as select
import requests
def login():
driver.get('https://cpadmin.com/Login/') # This never changes
driver.find_element_by_name('EnteredUserID').send_keys(f'username')#username that can change based on zone
driver.find_element_by_name('Password').send_keys(cpPassword)
driver.find_element_by_link_text('Login').click()
start()
def start():
for name in usernames:
driver.get('https://cpadmin.com/Operator/Users/')
select(driver.find_element_by_name("findOp0")).select_by_visible_text('Equal To')
driver.find_element_by_name('findValue0').send_keys(name)
driver.find_element_by_name('search').click()
elements = driver.find_elements_by_id('Row1Col0')
if len(elements) == 0:
print(f'{name}')
else:
continue
def end():
print('Application Complete')
time.sleep(10)
driver.close()
with open('/Users/branden/Desktop/test.csv', encoding='utf-8-sig') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
usernames = []
zones = []
for row in readCSV:
username = row[0]
zone = row[1]
usernames.append(username)
zones.append(zone)
driver = webdriver.Chrome()
secret = base64.b64decode(b'secret')#password stays the same for all zones
cpPassword = secret.decode('utf-8')
#Logins for each zone, by numeric digit
# 1 - username
# 2 - username2
# 3 - username3
# 4 - username4
# 5 - username5
# 6 - username6
# 7 - username7
# 99 - usernameh
login()