Привет, я зачищаю веб-сайт и использую selenium python. Код приведен ниже
url ='https://www.hkexnews.hk/'
options = webdriver.ChromeOptions()
browser = webdriver.Chrome(chrome_options=options, executable_path=r'chromedriver.exe')
browser.get(url)
tier1 = browser.find_element_by_id('tier1-select')
tier1.click()
tier12 = browser.find_element_by_xpath('//*[@data-value="rbAfter2006"]')
tier12.click()
time.sleep(1)
tier2 = browser.find_element_by_id('rbAfter2006')
tier2.click()
tier22 = browser.find_element_by_xpath("//*[@id='rbAfter2006']//*[@class='droplist-item droplist-item-level-1']//*[text()='Circulars']")
tier22.click()
tier23 = browser.find_element_by_xpath("//*[@id='rbAfter2006']//*[@class='droplist-item droplist-item-level-2']//*[text()='Securities/Share Capital']")
tier23.click()
tier24 = browser.find_element_by_xpath("//*[@id='rbAfter2006']//*[@class='droplist-group droplist-submenu level3']//*[text()='Issue of Shares']")
tier24.click()
Он работает останавливается на уровне 23, показывая ElementNoVisibleException. Я пробовал с другим классом, но похоже, что он не работает. Спасибо за помощь
0
Platalea Minor
7 Ноя 2019 в 09:11
Что такое уровень 23?
– undetected Selenium
7 Ноя 2019 в 09:31
Tier23 — это подменю в разделе «Проспекты». Поток кнопок — «Проспекты» -> «Ценные бумаги/акционерный капитал» -> «Выпуск акций».
– Platalea Minor
7 Ноя 2019 в 09:36
1 ответ
Есть два элемента, которые могут быть выбраны вашим XPath. Первый скрыт. Попробуйте ниже выбрать необходимый элемент:
tier23 = browser.find_element_by_xpath("//*[@id='rbAfter2006']//li[@aria-expanded='true']//*[@class='droplist-item droplist-item-level-2']//*[text()='Securities/Share Capital']")
Или короче
tier23 = browser.find_element_by_xpath("//li[@aria-expanded='true']//a[.='Securities/Share Capital']")
tier23.location_once_scrolled_into_view
tier23.click()
P.S. Обратите внимание, что эта опция по-прежнему не будет видна, потому что вам нужно сначала прокрутить список вниз. Я использовал tier23.location_once_scrolled_into_view
для этой цели
Также лучше использовать встроенные в Selenium ожидания вместо time.sleep
2
JaSON
7 Ноя 2019 в 09:36
Похожие вопросы
Новые вопросы
python-3.x
НЕ ИСПОЛЬЗУЙТЕ, ЕСЛИ ВАШ ВОПРОС ТОЛЬКО ДЛЯ PYTHON 3. Всегда используйте вместе со стандартным тегом [python].