#python #selenium #csv #anaconda
Вопрос:
Я создал скрипт на python с помощью selenium, который переходит на указанный мной веб-сайт, входит в систему и добавляет кандидата с фамилией, именем и электронной почтой. Что мне нужно, так это импортировать CSV-файл с фамилиями, именами и электронными письмами, и мне нужно автоматизировать этот же сценарий, но с использованием данных из CSV-файла.
Мне нужно импортировать csv и постоянно запускать скрипт python/selenium, пока не будут созданы все кандидаты, а затем завершить работу. Я не знаю, как это сделать. вот что у меня есть до сих пор, что работает, просто не хватает цикла и импорта csv..
!pip install selenium
!pip install webdriver_manager
!pip install bs4
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
from selenium.webdriver.common.keys import Keys
from time import sleep
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://newaccounttest.firstunited.test/bolts/")
sleep(2)
# Login
user_id=driver.find_element_by_xpath("/html/body/div/div/ui-view/login/div/md-content/form/div/md-input-container[1]/input")
user_id.send_keys("sfreeman")
sleep(2)
password=driver.find_element_by_xpath("/html/body/div/div/ui-view/login/div/md-content/form/div/md-input-container[2]/input")
password.send_keys("Getmoney^7")
login_btn=driver.find_element_by_xpath("/html/body/div/div/ui-view/login/div/md-content/form/button").click()
sleep(3)
# Employee channel
employee_channel=driver.find_element_by_xpath("/html/body/div/div/ui-view/desktop/blt-tiles/button[3]")
employee_channel.click()
sleep(10)
new_workspace=driver.find_element_by_xpath("/html/body/div/ui-view/ui-view/blt-tiles/button[2]")
new_workspace.click()
sleep(3)
# Click plus sign
plus_btn=driver.find_element_by_xpath("/html/body/div/ui-view/ui-view/md-fab-speed-dial/md-fab-trigger/button").click()
sleep(2)
plus_btn=driver.find_element_by_xpath("/html/body/div/ui-view/ui-view/md-fab-speed-dial/md-fab-actions/div[1]").click()
sleep(2)
# Enter last name , first name amp; hit create new applicant
last_name=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/div[2]/div/form/div[1]/md-input-container[1]/input")
last_name.send_keys("freeman")
sleep(1)
first_name=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/div[2]/div/form/div[1]/md-input-container[2]/input")
first_name.send_keys("seth")
sleep(1)
search_btn=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/div[2]/div/form/div[2]/button")
search_btn.click()
sleep(2)
emailfield=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/div/md-tabs/md-tabs-content-wrapper/md-tab-content[1]/div/blt-tab/div/ng-transclude/ng-include/div/blt-tab-content/div/div/div/div[2]/ng-transclude/md-content/form/fieldset/md-whiteframe/ng-form/div/div/md-input-container[2]/input")
sleep(3)
emailfield.send_keys("sfreeman@first.net")
# i
sleep(2)
i_btn=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/md-content/md-list/blt-search-item/md-list-item/div[2]/blt-search-toggle/button").click()
sleep(2)
addto_workplace=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/md-content/md-list/blt-search-item/blt-search-detail/div/div/div/div/div[2]/button").click()
sleep(2)
Комментарии:
1. Почему бы вам не прочитать csv и не сохранить все значения в словаре и не выполнить итерацию по каждой паре ключ-значение?
2. я думаю, вам следует использовать класс csv.DictReader (). посмотрите, поможет ли это: docs.python.org/3/library/csv.html#csv.DictReader
3. Я довольно новичок в python-не работал с созданием большого количества пользовательских словарей. Вот мой тестовый CSV-файл, из которого я пытаюсь извлечь. @itronic1990 Можете ли вы помочь Первым,Последним,Электронной почтой,Налогом,Dob,Полом,Адресом,Почтовым индексом,Городом,штатом,Телефоном,Лицензией Сета,фримена,sfreeman.firstunite.com,62765598,22.09.1959,m,5235 70-я ,79424,Слейтон,Техас,8067901291,39514777 кейс ,Джеймс ,kjames@firstunitd.net,678674677,25.10.1980,f,5655 60-я ,74555,Сан-Антонио ,Техас,8068889989,85285446 Эшли,кинг,aking@firstunited.com,747888999,7/10/1990,м,4444 1-я улица,79410,Лаббок,Техас,8067120122,90875666
Ответ №1:
С вашим csv-файлом, структурированным следующим образом:
username,first_name,surname,email
username,first_name,surname,email
Тогда ваш код будет выглядеть так:
!pip install selenium
!pip install webdriver_manager
!pip install bs4
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
from selenium.webdriver.common.keys import Keys
from time import sleep
import csv
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://newaccounttest.firstunited.test/bolts/")
sleep(2)
# Login
def enter_details(username, first_name, surname, email):
user_id=driver.find_element_by_xpath("/html/body/div/div/ui-view/login/div/md-content/form/div/md-input-container[1]/input")
user_id.send_keys(username)
sleep(2)
password=driver.find_element_by_xpath("/html/body/div/div/ui-view/login/div/md-content/form/div/md-input-container[2]/input")
password.send_keys("Getmoney^7") # Guessing this is a command of some kind? Won't change it.
login_btn=driver.find_element_by_xpath("/html/body/div/div/ui-view/login/div/md-content/form/button").click()
sleep(3)
# Employee channel
employee_channel=driver.find_element_by_xpath("/html/body/div/div/ui-view/desktop/blt-tiles/button[3]")
employee_channel.click()
sleep(10)
new_workspace=driver.find_element_by_xpath("/html/body/div/ui-view/ui-view/blt-tiles/button[2]")
new_workspace.click()
sleep(3)
# Click plus sign
plus_btn=driver.find_element_by_xpath("/html/body/div/ui-view/ui-view/md-fab-speed-dial/md-fab-trigger/button").click()
sleep(2)
plus_btn=driver.find_element_by_xpath("/html/body/div/ui-view/ui-view/md-fab-speed-dial/md-fab-actions/div[1]").click()
sleep(2)
# Enter last name , first name amp; hit create new applicant
last_name=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/div[2]/div/form/div[1]/md-input-container[1]/input")
last_name.send_keys(surname)
sleep(1)
first_name=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/div[2]/div/form/div[1]/md-input-container[2]/input")
first_name.send_keys(first_name)
sleep(1)
search_btn=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/div[2]/div/form/div[2]/button")
search_btn.click()
sleep(2)
emailfield=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/div/md-tabs/md-tabs-content-wrapper/md-tab-content[1]/div/blt-tab/div/ng-transclude/ng-include/div/blt-tab-content/div/div/div/div[2]/ng-transclude/md-content/form/fieldset/md-whiteframe/ng-form/div/div/md-input-container[2]/input")
sleep(3)
emailfield.send_keys(email)
# i
sleep(2)
i_btn=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/md-content/md-list/blt-search-item/md-list-item/div[2]/blt-search-toggle/button").click()
sleep(2)
addto_workplace=driver.find_element_by_xpath("/html/body/div[3]/md-dialog/md-content/md-list/blt-search-item/blt-search-detail/div/div/div/div/div[2]/button").click()
sleep(2)
with open('file.csv', 'r') as File:
csvFile = csv.reader(File, delimiter=',')
for row in csvFile:
enter_details(row[0], row[1], row[2], row[3])
Комментарии:
1. Хорошо, попробуем сейчас. дам вам знать, если у меня возникнут проблемы, спасибо
2. Так что просто перечислите поля заголовка CSV в def enter_details правильно?
3. это ошибка, которую я получаю. Я удостоверяюсь, что именно там находится мой csv-файл, и в нем говорится об этом. Обратная трассировка FileNotFoundError (последний последний вызов) <ipython-вход-27-715d30b944d2> в <ipython-вход-27-715d30b944d2><модуль> 54 спящий режим(2) 55 —<модуль>> 56 с открытым(‘boltsemployees.csv’, ‘r’) файлом: 57 csvFile = csv.reader(Файл, разделитель=’,’) 58 для строки в csvFile: FileNotFoundError: [Ошибка 2] Нет такого файла или каталога: ‘boltsemployees.csv’
4. Находится ли ваш csv-файл в том же каталоге, что и файл python?
Ответ №2:
import csv
with open('CSVProject.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row)
Выход:
{'First': 'seth', 'Last': 'freeman', 'Email': 'sfreeman.firstunite.com', 'Tax': '62765598', 'Dob': '9/22/1959', 'Gender': 'm', 'Address': '5235 70th ', 'Zip': '79424', 'City': 'Slaton', 'State': 'Texas', 'Phone': '8067901291', 'License ': '39514777 '}
{'First': 'kace ', 'Last': 'james ', 'Email': 'kjames@firstunitd.net', 'Tax': '678674677', 'Dob': '10/25/1980', 'Gender': 'f', 'Address': '5655 60th ', 'Zip': '74555', 'City': 'San Antonio ', 'State': 'Texas', 'Phone': '8068889989', 'License ': '85285446 '}
{'First': 'ashley', 'Last': 'king', 'Email': 'aking@firstunited.com', 'Tax': '747888999', 'Dob': '7/10/1990', 'Gender': 'm', 'Address': '4444 1st street', 'Zip': '79410', 'City': 'Lubbock', 'State': 'Texas', 'Phone': '8067120122', 'License ': '90875666'}