首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python脚本,它使用,尝试(失败)打印列表框中包含的元素

Python脚本,它使用,尝试(失败)打印列表框中包含的元素
EN

Stack Overflow用户
提问于 2019-11-12 14:51:56
回答 1查看 76关注 0票数 0

我正在运行的脚本如下:

代码语言:javascript
复制
    #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

我对Python非常陌生,所以请原谅任何糟糕的代码。代码有时会打印如下所示的所有listbox元素的列表:

  1. AT -奥地利金融市场管理局
  2. -比利时国家银行-保加利亚国家银行
  3. CY-塞浦路斯中央银行H 110CZ-捷克国家银行H 211H 112DE-联邦金融监督局<
  4. >H 213<代码>H 114>DK-丹麦金融监督局H 215H116EE-爱沙尼亚金融监督局H 217/code>H118/code>ES- Bank of西班牙H 219/code><>H120/code>芬兰金融监管机构代码< of >< of >< of >>>>><
  5. ><
  6. ><
  7. ><>H 211><代码>代码><代码>><代码>H120/H120>芬兰金融监管机构代码<
  8. 克罗地亚国家银行--匈牙利中央银行--匈牙利中央银行-匈牙利中央银行-爱尔兰中央银行-爱尔兰中央银行-金融监督局-金融监督局-意大利银行-H 138-金融市场管理局- Liechtenstein
  9. LT -立陶宛银行-H 241H 142LU-金融部门监督委员会H 243H 144LV>金融和资本市场代码Commission
  10. MT -马耳他金融服务局H 247/code>H 148NL-荷兰银行H 249H 150没有--挪威金融管理局金融代码< /code>HR HR>葡萄牙银行
  11. RO-罗马尼亚国家银行
  12. SE-瑞典金融监督局
  13. SI-斯洛文尼亚银行
  14. SK-斯洛伐克国家银行

G 264

但有时返回的列表是空的。在同一个网页上还有另外两个列表框,这段代码对于这些元素来说是一致的。

有人能解释一下为什么会发生这种事吗?提前谢谢。下面是我试图使用的listbox元素的HTML代码。

代码语言:javascript
复制
<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>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-12 15:15:39

改进的定位器和等待到liist的visibility_of_all_elements_located

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58821117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档