是什么导致此错误“ NavigableString对象没有属性'findAll'”?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

是什么导致此错误“ NavigableString对象没有属性'findAll'”?

2020-03-24 19:09:53 310 1

我无法共享页面,但这是我想要访问的示例html代码

<tr ng-repeat="record in records | orderBy: query.fullname" ng-click="create_dialog(record)" class="hand_cursor ng-scope" title="View Details" style="">

                                <td class="ng-binding">96685</td>

                                <td class="ng-binding">Alvarado, Jacqueline C.</td>

                                <td class="ng-binding">Nov 6, 2017</td>

                                <td align="right" class="ng-binding">A1054</td>

                                <td align="right" class="ng-binding">A1054 - A1054</td>

                                <td align="right" class="ng-binding">87004000</td>

                            </tr>

<tr ng-repeat="record in records | orderBy: query.fullname" ng-click="create_dialog(record)" class="hand_cursor ng-scope" title="View Details">

                                <td class="ng-binding">33522</td>

                                <td class="ng-binding">Bailey, Jacqueline B.</td>

                                <td class="ng-binding">Jan 16, 1992</td>

                                <td align="right" class="ng-binding">DL-46</td>

                                <td align="right" class="ng-binding">DL-46 - DL-46</td>

                                <td align="right" class="ng-binding">81313001</td>

                            </tr>

这是我试图运行的代码。尝试做的是访问我定位的第一个tr中的第二个td。我的预期结果应该是第二个td旁边的Name文本

test_words = ['Jacqueline','abercrombie']
    test_word = ['STEVEN']


    # test_words = ['STEVEN','(',')','-','69807','21490','321']
    for i in test_words:
        search = self.driver.find_element_by_xpath('//\*@id="page-wrapper"]/div[3]/div/div/div/div/div[3]/tabletoolstrans/div/input')
        search.clear()
        search.send_keys(i)
        search.send_keys(Keys.RETURN)
        time.sleep(3)
        soup = BeautifulSoup(self.driver.page_source,"html.parser")
        for item in soup.findAll("tr", {"class": "hand_cursor ng-scope"})[1]:
            for td in item.findAll("td")[1]:
                if td == i:
                    print("Search :"+i+"")
                    buttons.save_csv(self, "Pass")
                else:
                    print("Fail")
        print("jaq")
    time.sleep(3)

问题来源:stackoverflow

取消 提交回答
全部回答(1)
  • is大龙
    2020-03-24 19:10:02

    这里的问题是item是一个NavigableString对象,其中包含值\ n。NavigableString只是页面上的一小段文字,而您可能希望根据您的代码获得td项目列表。要了解有关NavigableStrings的更多信息,请参见此处:

    https://www.crummy.com/software/BeautifulSoup/bs4/doc/#navigablestring

    我认为这里的问题是在findAll的末尾使用数组符号([0])。您正确地获得了所有的tr,然后使用数组表示法仅取一个,然后循环遍历单个tr对象的结果。结果是td标签和它们之间的换行符。

    简而言之,摆脱[0];)

    我认为结束代码应该是...

    test_words = ['Jacqueline','abercrombie']
    test_word = ['STEVEN']
    
    for i in test_words:
        search = self.driver.find_element_by_xpath('//\*@id="page-wrapper"]/div[3]/div/div/div/div/div[3]/tabletoolstrans/div/input')
        search.clear()
        search.send_keys(i)
        search.send_keys(Keys.RETURN)
        time.sleep(3)
        soup = BeautifulSoup(self.driver.page_source,"html.parser")
        for item in soup.findAll("tr", {"class": "hand_cursor ng-scope"}):
            for td in item.findAll("td"):
                if td.text == i:
                    print("Search :"+i+"")
                    buttons.save_csv(self, "Pass")
                else:
                    print("Fail")
        print("jaq")
    time.sleep(3)
    

    注意-还在此行中添加了.text以获取标签的内容。

    if td.text == i:
    

    回答来源:stackoverflow

    0 0
+关注
0
文章
1138
问答
问答排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载