Задать вопрос
@EduardMalinochka

Python selenium webdriver находит не все элементы на странице. Как это исправить?

Мне нужно чтобы драйвер прокликал на все элементы на странице и спарсил отобразившуюся по клику информацию. Для этого нашел элементы по XPath и сохранил их в лист, чтобы написать к нему for loop. Все работало как надо, когда на странице было небольшое количество элементов - 22. Как только элементов стало больше, в моем листе сохраняется только часть из них и соответственно больше половины элементов не прокликивается. Код отрабатывается и не выдает никакой ошибки. Как это исправить?

# login function
def login(email,password):
    driver.get('https://crm.tender-win.ru/account/logon')
    driver.find_element_by_id('email').send_keys(email)
    driver.find_element_by_id('password').send_keys(password)
    driver.find_element_by_id('btnLogin').click()

df = []
login('somelogin','somepassword')
driver.get('https://crm.tender-win.ru/tenders/new')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'MyTenderMenuTabsInfo')))
tenders = [driver.find_elements_by_xpath("//div[@class='panel card ']") 
           or driver.find_elements_by_xpath("//div[@class='panel card new']")][0]

for tender in tenders:
    tender.click()
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'tenderCurrencyCode')))
    data = driver \
        .find_element_by_xpath('//*[@id="infoScroll"]/div/div[3]/div[2]/table') \
        .get_attribute('outerHTML')
    
    df1 = pd.read_html(data)
    df.append(df1)
    print(df)
  • Вопрос задан
  • 362 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Прокрутить страницу и прокликать еще?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@prafair
QA Engineer
1) Уберите [0] в переменной tenders
2) Посмотрите, какие элементы сохранились в tenders. Если не все, то нужно подождать подольше. Элемент MyTenderMenuTabsInfo может присутствовать, но не факт, что остальные элементы успели прогрузиться, так что проверьте.
3) В цикле сначала прокрутите к элементу, кликните и проверьте, что специфичная для него информация появилась, иначе при быстром кликанье и медленном браузере может браться старая информация
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы