Парсинг Selenium+ bs4 Python. Ошибка selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
Я новичок в парсинге. Есть задача: проверить, имеющиеся УНП компаний (файл csv, который переводится в список по ходу кода) по Единому государственному регистру (сайт: https://egr.gov.by/egrn/index.jsp?content=Find) и узнать актуальное состояние (Действующее, в ликвидации и т.д), выгрузить его в виде файла. Вот мой код
from selenium import webdriver
import time
from bs4 import BeautifulSoup
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
import pandas as pd
import csv
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
CSV = 'Статус'
def get_content(browser):
soup = BeautifulSoup(browser.page_source, 'lxml')
orgs = soup.findAll('table', class_='mb-6')
cards = []
for org in orgs:
cards.append(
{
'unp': org.find_all('td')[5].get_text(),
'state': org.find_all('td')[1].get_text()
}
)
return cards
def save_doc(orgs, path):
with open(path, 'w', newline='') as file:
writer = csv.writer(file, delimiter=';')
writer.writerow(['Статус', 'УНП'])
for org in orgs:
writer.writerow([org['unp'], org['state']])
def parser():
i = 0
browser = webdriver.Chrome()
browser.get("https://egr.gov.by/egrn/index.jsp?content=Find")
data = pd.read_csv("C:\\Users\\Наташа\\UNP.csv")
print(data)
UNP_spisok = data['Код налогоплательщика'].tolist()
print(UNP_spisok)
cards = []
while i<len(UNP_spisok):
print("Парсим UNP: ", i, UNP_spisok[i])
search_input = browser.find_element(By.NAME, "name")
WebDriverWait(browser, 20).until(
EC.presence_of_element_located((By.NAME, "name")))
for k in range(0, 9):
search_input.send_keys(Keys.BACKSPACE)
search_input.send_keys(str(UNP_spisok[i]) +"\n")
cards.extend(get_content(browser))
save_doc(cards, CSV)
i += 1
time.sleep(1)
print("Парсинг закончен")
browser.close()
parser()
При запуске кода, возникает ошибка (через разное количество выполненных циклов):
Traceback (most recent call last):
File "C:\Users\Наташа\PycharmProjects\pythonParsing\Poisk.py", line 72, in <module>
File "C:\Users\Наташа\PycharmProjects\pythonParsing\Poisk.py", line 59, in parser
save_doc(cards, CSV)
File "C:\Users\Наташа\PycharmProjects\pythonParsing\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 231, in send_keys
self._execute(
File "C:\Users\Наташа\PycharmProjects\pythonParsing\venv\lib\site-packages\selenium\webdriver\remote\webelement.py", line 395, in _execute
return self._parent.execute(command, params)
File "C:\Users\Наташа\PycharmProjects\pythonParsing\venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 345, in execute
self.error_handler.check_response(response)
File "C:\Users\Наташа\PycharmProjects\pythonParsing\venv\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
(Session info: chrome=115.0.5790.110)
Stacktrace:
Backtrace:
GetHandleVerifier [0x00007FF7C94C3E62+57250]
(No symbol) [0x00007FF7C943BC02]
(No symbol) [0x00007FF7C930DF6D]
(No symbol) [0x00007FF7C9342BD4]
(No symbol) [0x00007FF7C9341F94]
(No symbol) [0x00007FF7C93667AA]
(No symbol) [0x00007FF7C933E536]
(No symbol) [0x00007FF7C93669C0]
(No symbol) [0x00007FF7C937E312]
(No symbol) [0x00007FF7C9366583]
(No symbol) [0x00007FF7C933CC71]
(No symbol) [0x00007FF7C933DE54]
GetHandleVerifier [0x00007FF7C9774CF2+2879026]
GetHandleVerifier [0x00007FF7C97C6F30+3215472]
GetHandleVerifier [0x00007FF7C97BFD4F+3186319]
GetHandleVerifier [0x00007FF7C9555505+652869]
(No symbol) [0x00007FF7C9447518]
(No symbol) [0x00007FF7C94435F4]
(No symbol) [0x00007FF7C94436EC]
(No symbol) [0x00007FF7C94338E3]
BaseThreadInitThunk [0x00007FFC1F2F7614+20]
RtlUserThreadStart [0x00007FFC1FC026B1+33]
Я уже пыталась выставлять и time.sleep на 5-20 с в нескольких местах (после удаления уже проверенного УНП из поля и перед поиском информации из таблицы), пробовала применять WebDriverWait, но тут есть проблема. Иногда ошибка возникает из-за того, что таблица с результатом не успевает загрузиться на сайте. Если выставить WebDriverWait перед стадией считывания информации с этой таблицы, то программа завершится при первом УНП, которое не будет найдено на данном сайте.
Кусок кода разработчика для таблицы
Кусок кода разработчика в случае, когда информации нет
В связи с этим вопрос: может кто-нибудь сталкивался с ситуацией, когда нужно применить WebDriverWait и есть два возможных элемента, которые могут появится? Буду очень благодарна за ответ, уже всю голову себе сломала. Заранее, Спасибо!