Автоматизируйте задачу с помощью Python Selenium. (Как импортировать csv)

#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'}