使用python中的selenium处理ul标签内嵌套div的所有文本

时间:2016-02-11 13:33:04

标签: python selenium-webdriver

我有一些看起来像这样的HTML:

<div class="class1">
    <div class="some multiple classes here">
        <div class="some multiple classes here">
            <ul class="other classes">
                <li>
                    <div class="random">some text1</div>
                    <div class="random1">some text2</div>
                    <div class="random2">some text3</div>
                </li>
                <li>
                    <div class="random">some text4</div>
                    <div class="random1">some text5</div>
                    <div class="random2">some text6</div>
                </li>
                <li>
                    <div class="random">some text7</div>
                    <div class="random1">some text8</div>
                    <div class="random2">some text9</div>
                </li>
                <!-- here can appear more <li></li> elements -->
            </ul>
        </div>
    </div>
</div>

情况有点复杂:

  • 首先,只有少数<li></li>个标签内部有相同的<div>类,但文本不同。更多信息,<li></li>(具有相同的div s)会随着时间的推移而出现。

我很难找到使用some textXxpath在单个循环中检索所有selenium元素的解决方案(如果不可能,则不必要)但我无法找到远。更重要的是,当我完成所有<li></li>标记后,我想等待其他人出现并采取一些行动。

伪代码如下:

for mydriver.find_element_by_xpath('xpath of ul'):
    # here get all the texts
    # process them

2 个答案:

答案 0 :(得分:1)

您需要所有直接使用li标签的div吗?

divs = driver.find_elements_by_xpath('//li/div')

或者通过css选择器

divs = driver.find_elements_by_css_selector('li > div')

答案 1 :(得分:0)

您可以使用<li>找到所有<ul>代码,使用<div>代码找到所有<li>代码

divs = [] # will hold the divs
ul = driver.find_element_by_class_name('classes')
lis = ul.find_elements_by_tag_name('li') # list of the <li> tags
for li in lis:
    divs.append(li.find_elements_by_tag_name('div')) # add all the <div> tags to divs list

for div in divs:
    text = div.text

另一个解决方案是使用&#34;随机&#34;在课堂上

divs = driver.find_elements_by_css_selector('[class*="random"]')

for div in divs:
    text = div.text