Как ускорить прохождение вложенного цикла в PythonPython

Программы на Python
Ответить
Anonymous
 Как ускорить прохождение вложенного цикла в Python

Сообщение Anonymous »

Как ускорить прохождение вложенного цикла. Я занимаюсь автоматизацией браузера с помощью Selenium и в одном участке кода мне нужно сравнить коэффициенты и даты с ячейками таблицы. Коду требуется около 30 секунд, чтобы обойти всю пластину, около 6 строк и 6 столбцов.

Код: Выделить всё

    def __parse_full_page(self, url: str, data: dict = {}) -> bool:
try:
WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(Locator.PLAN)).click()
cells = WebDriverWait(self.driver, 10).until(EC.visibility_of_all_elements_located(Locator.CELLS_TABLE))
current_url = str(self.driver.current_url)
id_ticket = current_url.split("&")[-2].split("=")[-1]
button_planning = self.driver.find_element(*Locator.CONFIRM)

ticket_data = tickets.get(id_ticket)

if ticket_data != "Заявка не найдена":
_, max_rate = ticket_data.split(':')
max_rate = int(max_rate)
else: max_rate = 0

coefficients = ["Бесплатно"] + [f'✕{i}' for i in range(1, max_rate + 1)]

for coefficient in coefficients:
for cell in cells:
try:
date_text = cell.find_element(*Locator.DATE).text
try:
date_text_clean = date_text.split(',')[0].strip()
date_object = datetime.strptime(date_text_clean, "%d %B")
date_object = date_object.replace(year=datetime.now().year)
except ValueError as ve:
print(f"Ошибка при преобразовании даты: {ve}")
continue

buffer_days = int(config["BOT"]["BUFFER"])
today = datetime.now()
buffer_date = today + timedelta(days=buffer_days)

if date_object > buffer_date:
coefficient_element = cell.find_element(*Locator.RATE)
coefficient_text = coefficient_element.text
if coefficient_text.strip() == f"{coefficient}":
button_hover = cell.find_element(*Locator.CHOOSE_HOVER)
self.action.move_to_element(button_hover).perform()
try:
cell.find_element(*Locator.CHOOSE).click()
self.action.move_to_element(button_planning).click().perform()
new_id_el = self.driver.find_element(*Locator.ID).text
new_id = new_id_el.strip()
logger.debug("ЗАЯВКА ПРОШЛА")
self.__pretty_log({"id_ticket": id_ticket, 'coefficient': coefficient, 'date': date_text, "new_id": new_id})
return True
except Exception as e:
print(f"Ошибка при нажатии 'Выбрать': {e}")
else:
continue

else:
continue

except Exception as e:
print(f"Ошибка: {e}")
continue

except Exception as e:
print(f"Ошибка: {e}")

return False

Нужно ускориться для коэффициента в коэффициентах: для ячейки в ячейках:
Цикл проходит через WebElement
Не знаю как это ускорить.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»