【自动化实战】(三)筛选活动中点赞数量 TOP5 的作品

前言

本篇博文是 《Selenium IDE 自动化实战案例》 系列的第 篇博文,主要内容是通过 selenium 来获取活动中作品的点赞数量,并筛选出 TOP5 ,往期系列文章请访问博主的 自动化实战案例 专栏,博文中的所有代码全部收集在博主的 GitHub 仓库 中;

严正声明:本博文所讨论的技术仅用于研究学习,任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。

背景

在参加社区的技术创作特训营活动,其中有个 "最受欢迎创作者" 奖项,需要单篇作品点赞量 TOP3 的作者才能获奖,本来是无意参与其中,后来发现自己有机会,就努力了一下,没想到自此一发不可收拾,对手们都太猛了。

因此,为了能够实时观测到点赞量 TOP5 的情况,写了自动化脚本来获取数据。

实现

1、获取标题、作者和点赞数量的页面元素:

复制他们的 XPATH 路径,如下所示:

py 复制代码
# 标题
/html/body/div[1]/div[1]/div[3]/div[3]/div[1]/div/div[2]/com/div/section[21]/div[1]/h3

# 作者
/html/body/div[1]/div[1]/div[3]/div[3]/div[1]/div/div[2]/com/div/section[21]/div[2]/div[2]/div[1]/div/div/a

# 点赞数量
/html/body/div[1]/div[1]/div[3]/div[3]/div[1]/div/div[2]/com/div/section[21]/div[2]/div[2]/div[2]/span[2]

2、因为每一个作品都是一个 section 块,因此需要获取当前页面的 section 元素,

复制 XPATH 路径,如下所示:

py 复制代码
/html/body/div[1]/div[1]/div[3]/div[3]/div[1]/div/div[2]/com/div[1]/section

3、接下来,我们就可以使用循环获取每个作品的标题、作者和点赞数量了,代码如下所示:

py 复制代码
self.vars["array"] = []
self.vars["sections"] = self.driver.find_elements(
    By.XPATH, "/html/body/div[1]/div[1]/div[3]/div[3]/div[1]/div/div[2]/com/div[1]/section")

try:
    for section in self.vars["sections"]:
        # 作者
        author = section.find_element(
            By.XPATH, "./div[2]/div/div[1]/div/div/a").text
        # 题目
        title = section.find_element(By.XPATH, "./div[1]/h3").text
        # 点赞数量
        nums = section.find_element(
            By.XPATH, "./div[2]/div/div[2]/span[2]").text
        self.vars["array"].append((author, title, nums))
except:
    pass

运行结果:

4、排序选出 TOP5,这里的话使用 sorted 方法,通过 Lambda 表达式选择元组中的最后一个元素 nums 作为排序的依据:

py 复制代码
sorted(self.vars["array"], key=lambda x: int(x[-1]), reverse=True)[:5]

运行结果:

优化

由于页面使用 JS 进行动态渲染,也就是所谓的懒加载,我们只能获取到部分数据,因此需要设计滚动,模拟鼠标滚轮一直往下翻,直到到底部为止。

在 JS 中有个方法能够滑动页面 window.scrollBy(0, 4000),同时还有一个方法能够获取当前滚动条距离顶部的距离 document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;,于是将这两个方法组合在一起,我们就可以控制滚动条一直滑动到最底部了,代码如下所示:

py 复制代码
def roll(self):
    # 模拟滚动置底
    temp_height = 0
    while True:
        # 循环将滚动条下拉
        self.driver.execute_script("window.scrollBy(0, 4000)")
        # sleep一下让滚动条反应一下
        time.sleep(1)
        # 获取当前滚动条距离顶部的距离
        check_height = self.driver.execute_script(
            "return document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;")
        # 如果两者相等说明到底了
        if check_height == temp_height:
            break
        temp_height = check_height

番外

详见 冲榜时遇见神仙打架,网络战士羡煞我了

后记

通过使用 Selenium 编写的自动化取关脚本,我们成功地获取了活动中作品的点赞数量,并使用 sorted 函数筛选出了 TOP5 的作品;

以上就是 筛选活动中点赞数量 TOP5 的作品 的所有内容了,希望本篇博文对大家有所帮助!

严正声明:本博文所讨论的技术仅用于研究学习,任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。

📝 上篇精讲:(二)重塑抖音个性化推荐!自动化清空关注列表

💖 我是 𝓼𝓲𝓭𝓲𝓸𝓽,期待你的关注,创作不易,请多多支持;

👍 公众号:sidiot的技术驿站

🔥 系列专栏:Selenium IDE 自动化实战案例

相关推荐
Kai HVZ21 分钟前
python爬虫----爬取视频实战
爬虫·python·音视频
古希腊掌管学习的神23 分钟前
[LeetCode-Python版]相向双指针——611. 有效三角形的个数
开发语言·python·leetcode
m0_7482448326 分钟前
StarRocks 排查单副本表
大数据·数据库·python
oneouto33 分钟前
selenium学习笔记(二)
笔记·学习·selenium
B站计算机毕业设计超人33 分钟前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
路人甲ing..36 分钟前
jupyter切换内核方法配置问题总结
chrome·python·jupyter
游客5201 小时前
opencv中的常用的100个API
图像处理·人工智能·python·opencv·计算机视觉
每天都要学信号1 小时前
Python(第一天)
开发语言·python
搬码后生仔1 小时前
asp.net core webapi项目中 在生产环境中 进不去swagger
chrome·后端·asp.net
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite