#python #selenium #web-scraping #drop-down-menu
Вопрос:
Я пытаюсь выбрать элемент, который не отображается в меню по умолчанию. Элемент является последним и не будет отображаться, если его не прокрутить вниз. Я могу изменить номер элемента, но он не обновляет табличные значения номера элемента. Ниже приведен код, который я пробовал. Любые указатели будут очень признательны!! Просмотрел некоторые вопросы и не смог воспроизвести ни одного рабочего решения.
Скриншот: Исходное Изображение Страницы
Код ниже:
week_dropdown = driver.find_element_by_xpath('//*[@id="SEARCH"]/div/div[3]/div[2]/div[1]/div/div')
driver.execute_script("arguments[0].click();", week_dropdown)
page_value_span = driver.find_element_by_xpath('//*[@id="SEARCH"]/div/div[3]/div[2]/div[1]/div/div/span[2]')
page_value_edit = driver.execute_script('arguments[0].innerHTML = "1";', page_value_span)
driver.execute_script("arguments[0].click();",page_value_span)
<div span="8" class="ant-row ant-row-end" style="padding-top: 10px;"><div class="style_reportOptionBlock__1Qm2T" style="margin-right: 20px;"><label class="style_vlabelfull__1uP_p">#Weeks: </label><div class="ant-select style_vSelectSearchnew__3UstT ant-select-single ant-select-show-arrow" style="width: 60px;"><div class="ant-select-selector"><span class="ant-select-selection-search"><input autocomplete="off" class="ant-select-selection-search-input" role="combobox" aria-haspopup="listbox" aria-owns="rc_select_1_list" aria-autocomplete="list" aria-controls="rc_select_1_list" aria-activedescendant="rc_select_1_list_-1" readonly="" unselectable="on" value="" id="rc_select_1" style="opacity: 0;" aria-expanded="false"></span><span class="ant-select-selection-item" title="4">4</span></div><span class="ant-select-arrow" unselectable="on" aria-hidden="true" style="user-select: none;"><span role="img" aria-label="down" class="anticon anticon-down ant-select-suffix"><svg viewBox="64 64 896 896" focusable="false" class="" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></span></span></div></div>
Комментарии:
1. Можете ли вы поделиться HTML в текстовом формате ?
2. Я отредактировал сообщение и включил HTML. title=»4″, похоже, соответствует выпадающим элементам, так как 4 является значением по умолчанию. Я хотел бы перейти к 1.
3. что такое трассировка стека ошибок ?
4. Можете ли вы проверить
//span[@class='ant-select-selection-item' and text()='1']
, присутствует ли он только один раз в DOM ?5. Черт, просто выключи мой компьютер. Это не давало никаких ошибок, так как 1 появится в выпадающем списке, но таблица не будет обновляться соответствующими значениями. Когда я завтра встану, я первым делом отвечу.
Ответ №1:
Вы можете попробовать с ActionChains
week_dropdown = driver.find_element_by_xpath("xpath for open dropdown...").click()
element = driver.find_element_by_xpath("//div[@class='ant-select-item ant-select-item-option']/div[text()='1']")
actions = ActionChains(driver)
actions.move_to_element(to_element=element)
actions.click(on_element=element).perform()
Обязательно импортируйте ActionChains
from selenium.webdriver.common.action_chains import ActionChains
Вы также можете попробовать с arguments[0].scrollIntoView()
week_dropdown = driver.find_element_by_xpath("xpath for open dropdown...").click()
element = driver.find_element_by_xpath("//div[@class='ant-select-item ant-select-item-option']/div[text()='1']")
driver.execute_script('arguments[0].scrollIntoView();', element)
Это было то, что вы искали?
Комментарии:
1. Я попробовал метод scrollIntoView (), и он сработал. Я действительно ценю вашу помощь!!!
Ответ №2:
Если вы можете прокрутить меню, сначала немного подождите, прежде чем нажать/выбрать последний вариант. Дайте мне знать, если это сработает ?
Комментарии:
1. Я добавил два спящих режима, и он по-прежнему изменяет элемент на 1, но таблица не обновляется: week_dropdown = driver.find_element_by_xpath(‘//*[@id=»ПОИСК»]/div/div[3]/div[2]/div[1]/div/div’) драйвер.execute_script(«аргументы[0].нажмите ();», week_dropdown) страница value_span = драйвер.find_element_by_xpath(‘//*[@id=»ПОИСК»]/div/div[3]/div[2]/div[1]/div/div/span[2]’) time.sleep(3) page_value_edit = драйвер.execute_script(‘аргументы[0].innerHTML = «1»;’, page_value_span) time.sleep(3) драйвер.execute_script(«аргументы[0].нажмите ();», page_value_span)
2. Можете ли вы опубликовать полный тестовый сценарий, состоящий из страницы, которую вы посещаете ? Позвольте мне попробовать в моей машине. Это трудно проанализировать, просто взглянув на xpath.. ..
3. К сожалению, это сайт, для которого требуется пользователь/пропуск. В настоящее время пытаюсь связаться со scrollintoview, чтобы узнать, является ли это лучшим подходом.