【问题标题】:How to get data from multiple elements of multiple classes in selenium?如何从硒中多个类的多个元素中获取数据?
【发布时间】:2021-08-06 14:05:19
【问题描述】:

正如问题中所写,有多个 h3 标签和多个按钮,其中一些具有相同的类,而另一些具有不同的类,我想获取具有 companyname 类的 h3 标签的文本,并且我想获取所有按钮的文本使用此类 btn btn-xs btn-success 或此类 btn btn-xs btn-danger

这里是html:

<div class="col-md-6 col-sm-9">
                    <!-- <h3>Did you mean: <a href="/trademarks/search/"></a></h3> -->

                            <div class="searchresult" style="padding-left: 20px;">
                                <!-- <table> -->
                                    <!-- <tr> -->
                                        <!-- <td width="70%"> -->
                                        <div class="row">
                                          <div class="col-sm-12">
                                            <h3 style="margin-bottom: 0; letter-spacing: 0px;" class="companyname">
                                              <a href="/trademarks/953603-susox" style="">
                                                Susox
                                              </a>
                                            </h3> 

                                            <div class="lighter" style="padding-bottom: 5px">ID: 953603</div>

                                            <p>

                                                  <button type="button" class="btn btn-xs btn-success">Registered</button>


                                            <button type="button" class="btn btn-xs btn-default">Class: 5</button>
                                            <button type="button" class="btn btn-xs btn-default">Device</button>

                                            </p>
                                        </div>

                                        <div class="col-sm-8">
                                            <ul>
                                                <li>Filed on <strong>05 September 2000</strong></li>
                                                <li>Registered in <strong>GUJARAT</strong></li>
                                                <li>Filed in IPOffice <strong>AHMEDABAD</strong></li>
                                                <li>Published in Journal #9999</li>
                                            </ul>
                                        </div>
                                        <div class="col-sm-4 text-center">
                                              <div style="padding: 0px 0 10px 0; border: solid 0px #CCC;">
                                                <img class="img-responsive" alt="Susox" style="max-height: 100px; max-width: 100%" src="https://qcimages.sgp1.digitaloceanspaces.com/store/trademark/7081340/imageshrine/small-1ec5cfa763b881ffa0642b7f6ef802bf.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;X-Amz-Credential=GQGLOPQAZ7XLVOTEXYZH%2F20210517%2Fsgp1%2Fs3%2Faws4_request&amp;X-Amz-Date=20210517T094210Z&amp;X-Amz-Expires=900&amp;X-Amz-SignedHeaders=host&amp;X-Amz-Signature=fda1ed68cc66088d64d8cf166341905a61ccc1fac868781b75c8ab78828c587f">
                                              </div>
                                        </div>
                                      </div>
                            </div>
                            <div class="searchresult" style="padding-left: 20px;">
                                <!-- <table> -->
                                    <!-- <tr> -->
                                        <!-- <td width="70%"> -->
                                        <div class="row">
                                          <div class="col-sm-12">
                                            <h3 style="margin-bottom: 0; letter-spacing: 0px;" class="companyname">
                                              <a href="/trademarks/1190452-susox-t2" style="">
                                                Susox T2
                                              </a>
                                            </h3> 

                                            <div class="lighter" style="padding-bottom: 5px">ID: 1190452</div>

                                            <p>

                                                  <button type="button" class="btn btn-xs btn-success">Abandoned</button>


                                            <button type="button" class="btn btn-xs btn-default">Class: 5</button>
                                            <button type="button" class="btn btn-xs btn-default">Word</button>

                                            </p>
                                        </div>

                                        <div class="col-sm-8">
                                            <ul>
                                                
                                                <li>Registered in <strong>HARYANA</strong></li>
                                                <li>Filed in IPOffice <strong>DELHI</strong></li>
                                                
                                            </ul>
                                        </div>
                                        <div class="col-sm-4 text-center">
                                        </div>
                                      </div>
                            </div>
                            <div class="searchresult" style="padding-left: 20px;">
                                <!-- <table> -->
                                    <!-- <tr> -->
                                        <!-- <td width="70%"> -->
                                        <div class="row">
                                          <div class="col-sm-12">
                                            <h3 style="margin-bottom: 0; letter-spacing: 0px;" class="companyname">
                                              <a href="/trademarks/1190450-susox-200" style="">
                                                Susox 200
                                              </a>
                                            </h3> 

                                            <div class="lighter" style="padding-bottom: 5px">ID: 1190450</div>

                                            <p>

                                                  <button type="button" class="btn btn-xs btn-success">Abandoned</button>


                                            <button type="button" class="btn btn-xs btn-default">Class: 5</button>
                                            <button type="button" class="btn btn-xs btn-default">Word</button>

                                            </p>
                                        </div>

                                        <div class="col-sm-8">
                                            <ul>
                                                
                                                <li>Registered in <strong>HARYANA</strong></li>
                                                <li>Filed in IPOffice <strong>DELHI</strong></li>
                                                
                                            </ul>
                                        </div>
                                        <div class="col-sm-4 text-center">
                                        </div>
                                      </div>
                            </div>


                        
                       
 



            </div>

XPATH:

H3的A标签://h3[@class='companyname']

按钮://div[@class='col-sm-12']/p/button[@class='btn btn-xs btn-danger'] 或://div[@class='col-sm-12']/p/button[@class='btn btn-xs btn-success']

【问题讨论】:

    标签: python html selenium xpath selenium-chromedriver


    【解决方案1】:

    您可以按标签查找元素(如果您想查找所有 &lt;h3&gt; 标签或按类名。对于第一个,您应该使用:

    elements = driver.find_elements_by_tag_name('h3')
    
    for element in elements:
        print(element.text)
    

    或按类名查找:

    element = driver.find_elements_by_class_name('btn btn-xs btn-success')
    
    for element in elements:
        print(element.text)
    

    考虑到您还有名为 find_element_by_&lt;class_name|tag_name&gt; 的方法,它们只返回一个元素(它找到的第一个元素)

    【讨论】:

    • 在通过类名查找时,有2个类,我想保持boith元素的文本按顺序排列
    【解决方案2】:

    您可以使用“find_elements”将其添加到元素列表中。然后使用循环对其进行迭代,并在循环内将代码放置到 getText()。然后把它放到一个列表中,当你需要使用它时,你可以从该列表中获取所有的文本。

    例如:

    elements = driver.find_elements(By.ID, 'abc')
    
    for e in elements:
        print(e.text)
    

    在这里打印文本。取而代之的是,您可以将其添加到列表中并从中返回列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多