如何获得 Python Selenium 中的最后一堂课

Posted

技术标签:

【中文标题】如何获得 Python Selenium 中的最后一堂课【英文标题】:How can I get the last class in Python Selenium 【发布时间】:2021-06-28 17:04:55 【问题描述】:

我正在创建一个使用 selenium 从网站提取数据的程序。在这种情况下,我试图了解课程的长度。我在网页上有以下代码

<li class="">                      
<a href="/academy/lesson/intro-to-personality.html" data-virtual="3">
<span class="lesson__title">Intro to Personality</span></a>
<span class="lessonTime">4:16</span>
</li>

<li class="">                      
<a href="/academy/lesson/intro-to-real-estate.html" data-virtual="3">
<span class="lesson__title">Intro to Real Estate</span></a>
<span class="lessonTime">6:16</span>
</li>

<li class="is-viewing" test-id="course_nav_current_lesson">
<a href="/academy/lesson/freudian-defense-mechanisms.html" data-virtual="3">
Freudian Defense Mechanisms: Definition, Levels & Examples</a>
<span class="lessonTime">7:29</span>
<span class="icon-eye"></span>
</li>

该网页包含大约 8-15 个其他课程长度的列表,但我只对分配给用户的课程感兴趣。因为每次 xpath 都是动态的时它不会访问同一个网页。唯一一致的两件事是,分配给用户的课程始终位于底部,以及它有一个名为is-viewing 的特殊类。我尝试使用此代码提取数据:

lessonlength = driver.find_element_by_class_name('lessonTime').get_attribute('innerHTML')
print(f'Lesson is lessonlength long')

这将返回4:16,因为它是第一个与定义的类具有相同类的元素。有没有办法找到最后一堂课(因为它总是在最后)。

【问题讨论】:

【参考方案1】:

试试这个:

result = driver.find_element_by_css_selector(".is-viewing>.lessonTime").text

is-viewing - 是唯一的类,你需要它的子类lessonTime

另外,添加等待显示。

【讨论】:

css 也有:last-of-type 是的,在这种情况下是可以避免的。【参考方案2】:

您可以将所有元素查找到一个列表中,然后循环遍历该列表:

lessonlengthList = driver.find_elements_by_class_name('lessonTime')
for l in lessonlengthList:
    print(f'Lesson is l.text long')

或者获取最后一个元素:

lessonlengthList = driver.find_elements_by_class_name('lessonTime')
print(f'Lesson is lessonlengthList[-1].get_attribute('innerHTML') long')

【讨论】:

嗯,最新的声明对我不起作用。出于某种原因,它在中间挑选了一些东西。有没有办法通过在这个类中首先调用父类is-viewing来找到它。然后打电话给lessonTime? 是的,但这是一个更大的问题。我会使用像 //li[@class="is-viewing"]//span[@class='lessonTime'] 这样的 xpath

以上是关于如何获得 Python Selenium 中的最后一堂课的主要内容,如果未能解决你的问题,请参考以下文章

如何用python+selenium+phantomjs获得一个网页的动态生成的html代码

如何在使用selenium python切换帧时获得完整的html代码?

python selenium webdriver 怎么 获得 ajax 返回 内容

python下用selenium的webdriver包如何取得打开页面的html源代码呢

Python+Selenium学习--简单对象定位

使用 Selenium 和 Python,如何检查按钮是不是仍然可点击?