selenium-获取一组数组进行操作

  以  纵横中文网  中获取24小时畅销榜的书单为例

  此文仅做 selenium 在自动化测试中怎么获取一组数据进行说明,不做网络爬虫解释

  当然,使用爬虫得到本文的结果会简单快捷的多

区别 selenium 中的 elements 与 element

  例如:list.find_elements_by_class_name('rank_i_bname')  # 获得 class name 为 rank_i_bname 的所有数据

     list.find_element_by_class_name('rank_i_p_tit') # # 获得 class name 为 rank_i_p_tit 的一个数据,如果有多个则只取第一个

步骤:

  使用 selenium 定位到总分类

  然后通过判断24小时畅销榜,进入到24小时畅销榜的书目录

  最后获得书名和作者

 

如下图

代码如下:

 #coding=utf-8

 from selenium import webdriver
import unittest class getListall(unittest.TestCase): def setUp(self): # 纵横小说中文网
base_url = 'http://book.zongheng.com/rank.html'
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(10)
self.driver.get(base_url) def test_get_list_all(self):
u"""获取数组"""
driver = self.driver
# 获取所有分类
lists = driver.find_elements_by_class_name('rank_i_p_list')
for list in lists:
# 获取24小时畅销榜下的书
if list.find_element_by_class_name('rank_i_p_tit').text == "24小时畅销榜": # 获取书
names = list.find_elements_by_class_name('rank_i_bname')
authors = list.find_elements_by_class_name('rank_i_bcount') # 打印获取的数据
for name,author in zip(names,authors):
print(name.text + "," + author.text + ";") def tearDown(self):
self.driver.quit() if __name__ == '__main__':
unittest.main()

运行结果

结果分析

  分析结果会发现,第一个书单所获取的信息和其他的书单信息不一致

  原因:查看网页html便可知

  class=“rank_i_bname” 下的 text ,第一个书单和其他书单的信息是不一样的

    

如果看起来不美观可以将第一个书单提取处理单独进行定位获取信息进行打印

    然后在 for 循环中将获取到的书单的第一个信息不要打印

    问题解决

selenium-获取一组数组进行操作(七)的更多相关文章

  1. NumPy 学习(2): 数组的操作

    1. 简单一维数组的操作 一维数组的操作类似于python自身的list类型. In [14]: arr = np.arange(10) In [15]: arr Out[15]: array([0, ...

  2. js对数组的操作函数

    js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手, ...

  3. PHP数组的操作

    一.数组操作的基本函数数组的键名和值array_values($arr);获得数组的值array_keys($arr);获得数组的键名array_flip($arr);数组中的值与键名互换(如果有重复 ...

  4. js数组的操作及数组与字符串的相互转化

    数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/ ...

  5. Js数组的操作push,pop,shift,unshift等方法详细介绍

    js中针对数组操作的方法还是比较多的,今天突然想到来总结一下,也算是温故而知新吧.不过不会针对每个方法进行讲解,我只是选择其中的一些来讲. 首 先来讲一下push和pop方法,这两个方法只会对数组从尾 ...

  6. js 数组的操作

    js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一 ...

  7. Scala学习(三)----数组相关操作

    数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...

  8. js数组的操作 Full

    js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一 ...

  9. JavaScript jQuery 中定义数组与操作及jquery数组操作

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...

随机推荐

  1. Unity中雾效的开启

    原文:https://blog.csdn.net/Rhett_Yuan/article/details/54425236 1.对于雾效的开启在新版的Unity中通过界面菜单Windows->Li ...

  2. 【网页加速】lua redis的二次升级

    之前发过openresty的相关文章,也是用于加速网页速度的,但是上次没有优化好代码,这次整理了下,优化了nginx的配置和lua的代码,感兴趣的话可以看看上篇的文章: https://www.cnb ...

  3. 翻译:DECLARE Variable(已提交到MariaDB官方手册)

    本文为mariadb官方手册:DECLARE Variable的译文. 原文:https://mariadb.com/kb/en/library/declare-variable/我提交到MariaD ...

  4. 分布式系统监视zabbix讲解八之自动发现/自动注册--技术流ken

    自动发现(LLD) 概述 自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法.例如,Zabbix可以在你的机器上自动开始监控文件系统或网络接口,而无需为每个文件系统或网 ...

  5. 第一册:lesson twenty-one.

    原文:Which book? A:Give me a book please,B. B:Which book? This one? A:No,not that one. The red one. B: ...

  6. Intellij idea 项目目录设置 与包的显示创建

    1.把目录设置成为层级结构显示.和eclipse类似 去掉flatten Packages前面的勾 在项目中创建多级包的时候要注意,必须在Java下建,并且要全输入才能识别

  7. c#等程序中的关于时间的最大值【DateTime.MaxValue】和最小值【DateTime.MinValue】

    运行之后得到的结果 c# DateTime.MaxValue:// :: DateTime.MinValue:// :: Sql Server DateTime 类型必须介于 1/1/1753 12: ...

  8. java通过Access_JDBC30读取access数据库时无法获取最新插入的记录

    1.编写了一个循环程序,每几秒钟读取一次,数据库中最新一行数据 连接access数据库的方法和查询的信息.之后开一个定时去掉用. package javacommon.util; import jav ...

  9. linux /mac 下 go环境变量配置

    安装了go语言之后,还要设置路径,如果不设置路径,则执行 go 的时候会提示 go: command not found,提示的意思是没有这个命令行.这个是因为还没有设置PATH路径. 设置路径的方式 ...

  10. Go实现基于WebSocket的弹幕服务

    拉模式和推模式 拉模式 1.数据更新频率低,则大多数请求是无效的 2.在线用户量多,则服务端的查询负载高 3.定时轮询拉取,实时性低 推模式 1.仅在数据更新时才需要推送 2.需要维护大量的在线长连接 ...