ElementNotVisibleException Ошибка с xpath селен питон - PullRequest
0 голосов
/ 07 ноября 2019

Привет! Я пересматриваю сайт и использую Селен Питон. Код выглядит следующим образом:

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. Я пробовал с другим классом, но кажется, что не работает. Спасибо за помощь

1 Ответ

2 голосов
/ 07 ноября 2019

Есть два элемента, которые могут быть выбраны вашим 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()

PS Обратите внимание, что эта опция все еще не будет видна, потому что сначала вам нужно прокрутить список вниз. Я использовал tier23.location_once_scrolled_into_view для этой цели

Также лучше использовать встроенный Selenium Waits вместо time.sleep

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...