Selenium - все элементы из выпадающего списка, выбор одного

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
здравствуйте, подскажите пжл как у поля Субъект Российской Федерации:
узнать номера и имена всех опций этого поля, предложить инпутом ввести номер нужного субъекта, чтобы согласно номера ввёлся субъект
на сайте https://sudrf.ru/index.php?id=300#sp
например инпут:
Введите нужный субъект Российской Федерации:
ниже список, например:
50 для ввода субъекта Московская область
51 для ввода субъекта Мурманская область
(нужен полный) спс
сам я не могу справиться так как не хватает знаний, так как
если в вручную смотреть то искомого 4-ре повторения
1-е
HTML5Выделить код
1
2
3
<td style='padding: 5px 10px 5px 0; vertical-align: top;'>Субъект Российской Федерации:&nbsp;</td>
<td style='padding: 5px 0 5px 0; vertical-align: top;'>
<select id='court_subj_cd' name='court_subj' style='width:490px;' onchange='getSuds(this.value)'>
2-е
HTML5Выделить код
1
2
3
<td style='padding: 5px 10px 5px 0; vertical-align: top;'>Субъект Российской Федерации:&nbsp;</td>
<td style='padding: 5px 0 5px 0; vertical-align: top;'>
<select id='court_subj_cd' name='court_subj' style='width:490px;' onchange='getSuds(this.value)'>
3-е
HTML5Выделить код
1
2
3
<td style='padding: 5px 10px 5px 0; vertical-align: top;'>Субъект Российской Федерации:&nbsp;</td>
<td style='padding: 5px 0 5px 0; vertical-align: top;'>
<select id='court_subj' OnChange='change_court_subj(this.value)' name='court_subj' style='width:490px;'>
4-е
HTML5Выделить код
1
2
3
<td style='padding: 5px 10px 5px 0; vertical-align: top;'>Субъект Российской Федерации:&nbsp;</td>
<td style='padding: 5px 0 5px 0; vertical-align: top;'>
<select id='court_subj' name='court_subj' style='width:490px;' onchange='getSuds(this.value)'>
 

Noor

Пользователь
Пользователь
Ноя 13, 2020
85
19
8
Если сможете, то сохраните локальную копию страницы и прикрепмте к сообщению. Что бы можно было более предметно посмотреть на страницу и что-то вам посоветовать
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
спс за ответ, уже сдвинулся, сейчас проблема
как мне в поле выбора Субъект Российской Федерации ввести
87 = Чукотский автономный округ
и нажать кнопку Найти? спс

Код:
url0 = r'https://sudrf.ru/index.php?id=300#sp'

import time

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

chrome_options = Options()

# другие argument'ы '--disable-notifications', '--enable-automation', '--window-size=300,300', 'headless' - headless - без головы, чтобы не видеть браузер

chrome_options.add_argument('--start-maximized')

chromedriver = r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'

browser = webdriver.Chrome(executable_path=chromedriver, options=chrome_options)

browser.get(url0)

time.sleep(5)  # хардкодное ожидание

link = browser.find_elements_by_link_text('расширенный поиск')  # print(link) print(len(link))

if len(link) == 1: browser.find_element_by_link_text('расширенный поиск').click()  # нажать ссылку

time.sleep(3)  # хардкодное ожидание

from selenium.webdriver.support.ui import Select

# select = Select(browser.find_element_by_id('court_subj')), ниже ещё вариант, поиска через xpath

select = Select(browser.find_element_by_xpath('//*[@id="court_subj"]'))

all_names = [(e.get_property('value'), e.get_attribute('label')) for e in select.options]

for ind, name in all_names:

    # print(ind)

    if ind == '0':

        print(f'{ind} - чтобы не вводить данные в поле ввода субъекта')

    else:

        print(f'{ind} - для ввода субъекта: {name}')



input_court_subj = input(f'''Введите число - обозначение нужного субъекта Российской Федерации

для ввода в поле Субъект Российской Федерации

и нажмите Enter''')



if input_court_subj != '0':

    for ind, name in all_names:

        # print(ind, input_court_subj)

        if ind == input_court_subj:

            print(f'''Введено число: {ind} = {name}''')

            elem_court_subj = browser.find_element_by_xpath('//*[@id="court_subj"]')

            print(elem_court_subj)

            elem_court_subj.send_keys(name)

            break

    else:

        print(f'''Введённое число: {input_court_subj}

отсутствует в обозначениях нужного субъекта Российской Федерации

для ввода в поле Субъект Российской Федерации на сайте: {url0}

что является ошибкой, программа далее не будет продолжаться''')

        exit(0)
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
для обработки ошибок в коде можно запросить elem_court_subj == interactable-интерактивный, как?
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
сделал так:
Код:
browser.find_element_by_xpath(f'//*[@id="court_subj_cd"]/option[{ind}]').click()
но получил ошибку
Element is not currently visible and may not be manipulated-Элемент в настоящее время не отображается и не может быть изменен
скажите в чём я ошибаюсь? спс
 

Форум IT Специалистов