Я пытаюсь перебрать выпадающее меню по этому адресу: https://www.accuform.com/safety-sign/danger-danger-authorized-personnel-only-MADM006
Так, например, первое выпадающее меню - в разделе параметров - перечисляет различные материалы, и я хочу выбрать каждыйодин по очереди, а затем собрать некоторую другую информацию с веб-страницы, прежде чем перейти к следующему материалу.Вот мой текущий код:
driver = webdriver.Firefox()
driver.get('https://www.accuform.com/safety-sign/danger-danger-authorized-personnel-only-MADM006')
time.sleep(3)
driver.find_element_by_id('x-mark-icon').click()
select = Select(driver.find_element_by_name('Wiqj7mb4rsAq9LB'))
options = select.options
optionsList = []
driver.find_elements_by_class_name('select-wrapper')[0].click()
element = driver.find_element_by_xpath("//select[@name='Wiqj7mb4rsAq9LB']")
actions = ActionChains(driver)
actions.move_to_element(element).perform()
# driver.execute_script("arguments[0].scrollIntoView();", element)
for option in options: #iterate over the options, place attribute value in list
optionsList.append(option.get_attribute("value"))
for optionValue in optionsList:
print("starting loop on option %s" % optionValue)
# select = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//select[@name='Wiqj7mb4rsAq9LB']")))
# select = Select(select)
select.select_by_value(optionValue)
Я начал только с цикла, но получил эту ошибку:
ElementNotInteractableException: Message: Element <option> could not be scrolled into view
Затем я добавил webdriverwait и получил ошибку TimeoutException.
Затем я понял, что, вероятно, мне следует нажать на оболочку, в которой удерживается раскрывающийся список, поэтому я добавил щелчок, который вызывает меню, но я все еще получил исключение TimeoutException.
Итак, я подумал, может быть, мне следует перейти к элементу, который я пробовал со строками цепочки действий, и получил эту ошибку
WebDriverException: Message: TypeError: rect is undefined
Я пытался избежать этой ошибки, используя этот кодвместо этого:
# driver.execute_script("arguments[0].scrollIntoView();", element)
Что снова привело к исключению timeoutexception.
Я довольно новичок в Python и Selenium и в основном только что модифицировал код из SO-ответов на подобные вопросы, но ничего не помогло,
Я использую Python 3.6 и текущие версии Selenium и Firefox WebDriver.
Если что-то неясно или вам нужна дополнительная информация, просто дайте мне знать.
Спасиботак много!
РЕДАКТИРОВАТЬ: Основываясь на ответе и комментариях Каджал Кунды, я обновил свой код следующим образом:
`material_dropdown = driver.find_element_by_xpath("//input[@class='select-
dropdown']")
driver.execute_script("arguments[0].click();", material_dropdown)
materials=driver.find_elements_by_css_selector("div.select-wrapper
ul.dropdown-content li")
for material in materials:
# material_dropdown =
driver.find_element_by_xpath("//input[@class='select-dropdown']")
# driver.execute_script("arguments[0].click();", material_dropdown)
# materials=driver.find_elements_by_css_selector("div.select-wrapper ul.dropdown-content li")
material_ele=material.find_element_by_tag_name('span')
if material_ele.text!='':
material_ele.click()
time.sleep(5)
price = driver.find_element_by_class_name("dataPriceDisplay")
print(price.text)`
В результате он успешно печатает цену дляпервый тип материала, но затем он возвращает: StaleElementReferenceException: Message: The element reference of <li class=""> is stale;...
Я пробовал варианты наличия хэшированных строк внутри и снаружи цикла, но всегда получаю версию ошибки StaleElementReferenceException.
Есть предложения?
Спасибо!