Чтение / запись данных из / в Excel с использованием нескольких потоков / процессов параллельно - PullRequest
0 голосов
/ 17 июня 2020

Я работаю над проектом, который требует заполнения формы (чтения входных данных из листа Excel) и получения выходного значения (и сохранения его в листе Excel) при нажатии кнопки отправки. Мне удалось автоматизировать этот процесс с помощью Python + Selenium, но требуется некоторое время, чтобы go по всем строкам файла xls.

Примечание. XLUtils - это еще один файл python с вспомогательные функции. Я также использую openpyxl и xlrd для чтения / записи из файла excel

Вот код (NO THREADS) на высоком уровне:

#Initial set-up
url = "https://url.com"
driver = webdriver.Chrome(options=options, executable_path=r'C:/chromedriver.exe')
driver.get(url)
driver.maximize_window()

#Location of the input sheet
path = "C:/Book1.xlsx"

#Get number of rows from the excel input sheet
rows = XLUtils.getRowCount()

#Log into website
XLUtils.login(driver)

#Loop through all records from the input sheet
for row_num in range(4, rows + 1):
    try:
        XLUtils.fill_out_form(driver, path, row_num)
    except:
        print("Element not found and test failed")
        continue

#Log out and close Browser
XLUtils.logout(driver)

Вот пример многопоточности, но он довольно простой, как показано ниже:

def test_logic():
    url = "https://www.google.com"
    driver = webdriver.Chrome(options=options, executable_path=r'C:/chromedriver.exe')
    driver.get(url)
    driver.maximize_window()
    search_bar = driver.find_element_by_xpath("//input[@name='q']").send_keys("python threading")
    time.sleep(1)
    # driver.quit()

num_browsers = 5   # Number of browsers to spawn
thread_list = list()

# Start test
for i in range(num_browsers):
    t = threading.Thread(name='Test {}'.format(i), target=test_logic)
    t.start()
    time.sleep(1)
    print(t.name + ' started!')
    thread_list.append(t)

# Wait for all threads to complete
for thread in thread_list:
    thread.join()

print('Test completed!')

Мой вопрос: : Как я могу объединить два кода для достижения моей цели? Это просто вопрос обертывания процесса, который я хочу воспроизвести в функции, а затем передачи этой функции в часть кода потоковой передачи? Если да, то как мне удастся l oop весь xls-файл партиями по 5 и прочитать / записать каждый из / в полученный файл excel.

Это сложная проблема, и я, честно говоря, не нашел аналогичный вопрос по этому поводу, поэтому любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...