Python script that uses Selenium webdriver for Chrome, trying (and failing) to print elements contained in a listbox

pj5654

The script I am running is as follows:

    #import necessary packages
    from selenium import webdriver


    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.chrome.options import Options

    #run on headless browser
    chrome_options = Options()
    chrome_options.add_argument("--headless")
    driver = webdriver.Chrome(options=chrome_options)
    ####

    #driver = webdriver.Chrome()
    # Open the website
    driver.get('https://euclid.eba.europa.eu/register/pir/search')
    driver.set_window_size(1200, 800)
    driver.maximize_window()

    #find element using the link text
    xpath_institution_search = "//a[@href='/register/pir/search' and contains(text(), 'InstitutionSearch')]"                        
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, xpath_institution_search))
)
    finally: 
        institution_search = driver.find_element_by_xpath(xpath_institution_search)
        driver.execute_script("return arguments[0].scrollIntoView();", institution_search)
        institution_search.click()

    #select all appropriate National Competent Authorities
    xpath_nca_list_new = '(//p-listbox[@class="col-md-9 ng-untouched ng-pristine ng-valid" and @name="ncaList"])'                   
    #find the listbox element using it's xpath
    nca_listbox = driver.find_element_by_xpath(xpath_nca_list_new)
    #find elements within list box using tag names
    nca_div_tags = nca_listbox.find_elements_by_tag_name("div")
    #find element representing "select all" checkbox
    select_all_ncas = nca_div_tags[5]
    #find all list content (National Competent Authorities)
    nca_content_list = nca_div_tags[0].find_elements_by_tag_name("ul")
    #store list content in an ordered list 
    ncas = nca_content_list[0].find_elements_by_tag_name("li")

    #make web driver wait until element is visible before further action
    try:
        element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, xpath_nca_list_new)))
    finally:
        count = 1
        #print out list of ncas
        for item in ncas:
            text = item.text
            print(str(count) + ". " + text)
            count=count+1

I'm very new to Python so please excuse any terrible code. The code sometimes prints a list of all the listbox elements like so:

  1. AT - Austrian Financial Market Authority
  2. BE - National Bank of Belgium
  3. BG - Bulgarian National Bank
  4. CY - Central Bank of Cyprus
  5. CZ - Czech National Bank
  6. DE - Federal Financial Supervisory Authority
  7. DK - Danish Financial Supervisory Authority
  8. EE - Estonian Financial Supervision Authority
  9. ES - Bank of Spain
  10. FI - Finnish Financial Supervisory Authority
  11. FR - Prudential Supervisory and Resolution Authority
  12. GB - Financial Conduct Authority (FCA)
  13. GR - Bank of Greece
  14. HR - Croatian National Bank
  15. HU - Central Bank of Hungary
  16. IE - Central Bank of Ireland
  17. IS - Financial Supervisory Authority
  18. IT - Bank of Italy
  19. LI - Financial Market Authority Liechtenstein
  20. LT - Bank of Lithuania
  21. LU - Commission for the Supervision of Financial Sector
  22. LV - Financial and Capital Market Commission
  23. MT - Malta Financial Services Authority
  24. NL - The Netherlands Bank
  25. NO - The Financial Authority of Norway
  26. PL - Polish Financial Supervision Authority
  27. PT - Bank of Portugal
  28. RO - National Bank of Romania
  29. SE - Swedish Financial Supervisory Authority
  30. SI - Bank of Slovenia
  31. SK - National Bank of Slovakia

But sometimes the list that is returned is empty. There are two other listboxes on the same webpage and this very same code works consistently for these elements.

Can anyone shed some light on why this is happening? Thanks in advance. Below is the HTML code for the listbox element I am trying to work with.

<p-listbox class="col-md-9 ng-untouched ng-pristine ng-valid" name="ncaList" optionlabel="CodeDisplayValue" _ngcontent-bwu-c7="">
<div class="ui-listbox ui-inputtext ui-widget ui-widget-content ui-corner-all" style="width: 100%;">
    <div class="ui-helper-hidden-accessible">
        <input type="text" readonly="readonly">
    </div>
    <!---->
    <!---->
    <div class="ui-widget-header ui-corner-all ui-listbox-header ui-helper-clearfix ui-listbox-header-w-checkbox ng-star-inserted">
        <!---->
        <div class="ui-chkbox ui-widget ng-star-inserted">
            <div class="ui-helper-hidden-accessible">
                <input type="checkbox" readonly="readonly">
            </div>
            <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
        </div>
        <!---->
    </div>
    <div class="ui-listbox-list-wrapper" style="max-height: 250px;">
        <ul class="ui-listbox-list">
            <!---->
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">AT - Austrian Financial Market Authority</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">BE - National Bank of Belgium</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">BG - Bulgarian National Bank</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">CY - Central Bank of Cyprus</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">CZ - Czech National Bank</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">DE - Federal Financial Supervisory Authority</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">DK - Danish Financial Supervisory Authority</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">EE - Estonian Financial Supervision Authority</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">ES - Bank of Spain</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">FI - Finnish Financial Supervisory Authority</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">FR - Prudential Supervisory and Resolution Authority</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">GB - Financial Conduct Authority (FCA)</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">GR - Bank of Greece</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">HR - Croatian National Bank</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">HU - Central Bank of Hungary</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">IE - Central Bank of Ireland</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">IS - Financial Supervisory Authority</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">IT - Bank of Italy</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">LI - Financial Market Authority Liechtenstein</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">LT - Bank of Lithuania</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">LU - Commission for the Supervision of Financial Sector</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">LV - Financial and Capital Market Commission</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">MT - Malta Financial Services Authority</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">NL - The Netherlands Bank</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">NO - The Financial Authority of Norway</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">PL - Polish Financial Supervision Authority</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">PT - Bank of Portugal</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">RO - National Bank of Romania</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">SE - Swedish Financial Supervisory Authority</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">SI - Bank of Slovenia</span>
                <!---->
            </li>
            <li tabindex="0" class="ui-listbox-item ui-corner-all ng-star-inserted" style="display: block;">
                <!---->
                <div class="ui-chkbox ui-widget ng-star-inserted">
                    <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-clickable"></span></div>
                </div>
                <!----><span class="ng-star-inserted">SK - National Bank of Slovakia</span>
                <!---->
            </li>
        </ul>
    </div>
    <!---->
</div>

Sers

Improved locators and with wait until visibility_of_all_elements_located of the liist:

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Institution Search"))).click()
search_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "[label=Search] button")))
driver.execute_script("arguments[0].scrollIntoView()", search_button)
search_button.click()

nca_list = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "[name=ncaList] li")))
for nca in nca_list:
    print(nca.text)

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Selenium chrome webdriver not able to locate elements in python

Selenium Python Webdriver chrome print src's of all imgs

Python Selenium Chrome Webdriver

Python selenium webdriver : trying to call a javascript function

Python, selenium webdriver chrome, obtain page source from inside of many web elements

Python Selenium Failing When Some Threads Create Webdriver

Scrapy with selenium, webdriver failing to instantiate

(Selenium - Python) Finding one of two elements in webDriver

Python Problem with locating elements [selenium][chorme webdriver]

--headless is not an option in chrome webdriver for selenium python

Python selenium with chrome webdriver - change user agent

Handle notifications in Python + Selenium Chrome WebDriver

Tweet using Selenium Python chrome webdriver

Issues with selenium in Python (Maybe installing chrome webdriver)

Error using Selenium Chrome Webdriver with python

Selenium webdriver can't find elements at chrome://downloads

Selenium Chrome webdriver can't find elements after content is reloaded

Unable to locate element using selenium chrome webdriver in python selenium

How to use an existing google chrome profile with selenium chrome webdriver in python?

Failing to set up proxy for chrome in Selenium (Python 3.7)

How to click and print multiple elements in Selenium/Python?

Selenium Python: doesn't print the elements text

I am trying to like a comment in instagram with selenium webdriver in Python

How to print the text using a locator from the span in selenium webdriver python?

Get the text contained in all the tag having the attribute specify as "<div class='wld' text >" with the WebDriver Selenium in python

Python Selenium Chrome Driver doesnt find elements

Hide elements using selenium webdriver in python by executing a javascript

Can't get all page elements using selenium webdriver in python?

Unable to click or select checkbox using selenium python webdriver chrome