Selenium и Excel - Импорт данных Excel и ключей отправки - PullRequest
3 голосов
/ 01 мая 2019

Я работаю над проектом, в котором мне нужно импортировать лист Excel в форму веб-сайта. У меня проблемы с правильным чтением данных с листа и отправкой с помощью send_keys.

  • Сначала я создал записи в форме:

entries in the form

load_rows = 0
while load_rows < 101:
    add_element = driver.find_element_by_css_selector('.form-footer')
    add_element.click()
    load_rows = load_rows + 1
    driver.execute_script("window.scrollTo(0, 1000);") 
  • Затем я получаю данные из таблицы Excel, которые соответствуют требуемым записям на сайте:

excel sheet

# Loading the Excel Info
filepath = "trusted_ips.xlsx"
wb = load_workbook(filepath)
ws = wb.active
max_row = sheet.max_row
max_column = sheet.max_column
print("Total columns : ", max_column)
print("Total rows : ", max_row)

Похоже, он хранит все column A в name_elements.. Итак, функция send_keys отправляет все column A перед переходом к следующему полю.

Я хочу, чтобы он отправлял только каждый элемент в поле, и я думаю, что список исправит это. Но я не слишком уверен.

for name_elements in driver.find_elements_by_xpath ('//*[contains(@id, 
    "_name")]'):
    for row in ws['A2':'A100']:
        for cell in row:
            name_elements.send_keys(cell.value)
    print(name_elements)

Ответы [ 2 ]

1 голос
/ 01 мая 2019

вы, вероятно, хотите использовать pandas или работать над форматированием вашего файла Excel из openpyxl в более управляемый словарь.

Я проделал аналогичную работу, где мне нужно почистить сайт, где вводится информация о файле Excel.

Моя установка похожа на следующую

import pandas as pd

#load an excel file into a pandas dataframe
df = pd.read_excel("myfile.xlsx",
                    sheet_name=1, # pick the first sheet
                    index_col='client') # set the pandas index to be the column labeled 'client'

# .to_dict converts the dataframe to a dictionary with 'client' being the key, and the remaining rows being converted to dictionary with the column label as key and row as value
for client, record in df.to_dict(orient='records'):
    print(client) # use these print statements if what you're looping over is unfamiliar 
    print(record)
    driver.find_element('#client_input).send_keys(client)
    driver.find_element('#address_input').send_keys(record['address'])

0 голосов
/ 02 мая 2019

Я смог решить эту проблему следующим образом -

Я создал список cells[] для хранения значения. Затем следует использовать переменную name_elements для их хранения. Настройки counter=0

cells=[]
counter=0
name_elements = driver.find_elements_by_xpath ('//*[contains(@id, "_cidr")]')

Первый цикл перебирает столбец A таблицы Excel и сохраняет значения в списке cells[].

for row in ws['C2':'C100']:
    for cell in row:
        cells.append(cell.value)

Второй цикл берет список, для каждого значения выполняет ключ отправки на следующий name_elements, используя счетчик для его обхода.

for cell in cells:
    name_elements[counter].send_keys(cell)
    counter+=1
...