基于 Python 语言的 Selenium(二)

一、基于 Python 语言的 Selenium 环境搭建

1. 安装python

注意:

  1. 勾选添加环境变量,不然得自己配置环境变量
  2. 选择自定义安装地址,否则很难找到安装地址

2. 安装 selenium

pip install -U selenium

3. 准备浏览器驱动器

  • IEDriverServer、chromedriver(google)、geckodriver(Firefox)
  • webdriver.Ie()、.Chrome()、.Firefox()
  • 均无需安装,复制到\Python中即可

4. HTMLTestRunner.py

  • 无需安装或配置
  • 用于生成测试结果报告
  • 可以自己修改

二、编写脚本

1. 导入包

  • from selenium import webdriver
  • from selenium.webdriver.support.select import Select
    • 用以支持下拉列表对象
  • from time import sleep

2. 打开和关闭浏览器

  • driver=webdriver.Ie()
    • webdriver.Chrome()
    • webdriver.Firefox()
  • driver.close()
    • 关闭浏览器
  • driver.quit()
    • 关闭浏览器以及浏览器驱动程序

3. 打开 Url

  • driver.get(“url 地址”)

4. 等待时间

  • sleep(3)
    • wait 3s
  • driver.implicitly_wait(3)
    • 隐性等待时间为 3 秒

5. 切换框架/窗口

  • 使用 switch_to 包
  • 定位到当前聚焦的元素上
    • driver.switch_to.active_element()
  • 切换到 alert 弹窗
    • driver.switch_to.alert()
  • 切换到主页面
    • driver.switch_to.default_content()
  • 切换到某个 frame
    • driver.switch_to.frame(编号或 name)
  • 切换到指定的 window_name 页签
    • driver.switch_to.window(window_name)
  • 切换到上一层的 frame
    • driver.switch_to.parent_frame()

6. 定位页面元素

  • driver.find_element_by_
    • name(“login”)
    • id
    • xpath
    • tag_name
    • link_text
    • partial_link_text
    • class_name
  • driver.find_elements_by_
    • name(“控件 name 名”)[下标]
  • Select(driver.find_elements_by_?)
    • 用于识别下拉列表元素
    • 需要导入包
      • from selenium.webdriver.support.select import Select

7. 页面元素的属性和方法

  • driver.title()
    • 获得网页标题
  • 对象.text
    • 获得页面元素的文本值
    • 属于属性
  • 对象.get_attribute(“属性名”)
    • 获得指定属性的值
  • Select(对象).select_by_value
    • 需要导入包
      • from selenium.webdriver.support.select import Select
    • select_by_index
    • select_by_visible_text
    • deselect_all()
      • 取消所有选项
    • deselect_by_index()
      • 取消对应 index 选项
    • deselect_by_value()
      • 取消对应 value 选项
    • deselect_by_visible_text()
      • 取消对应文本选项
    • first_selected_option()
      • 返回第一个选项
    • all_selected_options()
      • 返回所有的选项
  • 页面元素.send_keys(“数据”)
    • 用于键盘输入数据
  • 页面元素.click()
    • 支持单选按钮、复选框、命令按钮

三、增强脚本

1. 检查点

1.1 in 运算符

  • str1 in str2
    • 用于判断 str1 是否存在于 str2 中

1.2 if 语句

	if (条件表达式): 
		语句 
	else: 
		语句

2. 参数化

2.1 for 循环

	for i in range(初值,终值+1): 
		语句

2.2 读 txt 文件

  • file=open(文件名,‘r’)
    • 返回文件对象,文本默认编码方式是 UTF-8。
    • 'r’表示只是读,默认项。
    • 读取时默认会将平台有关的行结束符(Windows 中是\r\n)转换为\n。
    • 文件名外使用 r 可以禁止\转义。
  • 遍历文件
    • for 变量 in file
      • 输出变量即可读出整个文件。
      • 按行读出。
    • list=file.readlines( )
      • 把文件中的所有行读到一个列表中,换行符可读出。
      • len(list) :返回列表中的元素个数
  • 关闭文件
    • file.close( )
      • 释放文件占用的系统资源。

2.3 excel 文件IO操作

使用xlrd、xlwt模块对excel文件中的数据进行读写。

2.3.1 安装xlrd模块

window+R打开cmd窗口,执行下面命令完成xlrd、xlwt的安装

	pip3 install xlrd
	pip3 install xlwt

2.3.2 读取数据

将上文的数据做到excel文件中,作为数据源

	import xlrd
	#f作为文件对象
	f = xlrd.open_workbook(r"e:\dd.xlsx")
	# <xlrd.sheet.Sheet object at 0x000001801A725248>
	# sheet页索引号是从0开始的
	# table = f.sheet_by_index(0)
	# table = f.sheet_by_name("Sheet1")
	table = f.sheets()[0]
	rows = table.nrows
	cols = table.ncols
	# print(rows)
	# print(table.row_values(0)[0])
	for i in range(0,n):
	    #遍历行数据,然后索引单元格
	    # print(table.row_values(i)[0])
	    #直接通过坐标,遍历单元格数据
	    print(table.cell_value(i,0))

2.3.3 写入数据

	import xlwt
	#创建工作簿
	f = xlwt.Workbook(encoding="utf-8")
	
	#  #创建sheet
	sheet1 = f.add_sheet(r'sheet1',cell_overwrite_ok=True)
	row0 = ["user00","123456",'123456',"[email protected]"]
	 #生成第一行
	for i in range(0,len(row0)):
	    sheet1.write(0,i,row0[i])  # 顺序为x行x列写入第x个元素
	f.save('e:\dd.xls')

======输出结果======
在e:根目录下创建了一个心的excel工作簿,数据也被写入其中

2.4 csv 文件IO操作

2.4.1 读取csv文件数据

	import csv
	#现在要做的就是对csv文件的读操作
	with open(r"e:\dd.csv","a",encoding="utf-8") as f:
	    data = csv.reader(f)
	    #<_csv.reader object at 0x000001B4E939B518>
	    # <class '_csv.reader'>ss
	    # print(type(data))
	    for i in data:
	        print(i)
        
        
=======输出结果===========
['username', 'password', 'repassword', 'email']
['user1', '123456', '123456', '[email protected]']
['user2', '123456', '123456', '[email protected]']
['user3', '123456', '123456', '[email protected]']
['user4', '123456', '123456', '[email protected]']
['user5', '123456', '123456', '[email protected]']
['user6', '123456', '123456', '[email protected]']
['user7', '123456', '123456', '[email protected]']
['user8', '123456', '123456', '[email protected]']
['user9', '123456', '123456', '[email protected]']
['user10', '123456', '123456', '[email protected]']

2.4.2 写入csv文件数据

import csv
#现在要做的就是对csv文件的写操作,newline='',主要是避免写入数据之后,有多余的换行
with open(r"e:\dd.csv","a",encoding="utf-8",newline='') as f:
    # 往csv文件中写入一行数据
    dda = ['user11', '123456', '123456', '[email protected]']
    csv_writer = csv.writer(f,dialect="excel")
    csv_writer.writerow(dda)
    
    # 往csv文件中写入多行数据
    csv_writer.writerows([['user11', '123456', '123456', '[email protected]'],['user12', '123456', '123456', '[email protected]']])

2.5 访问数据库

  • 安装 pymysql
    • 用于支持 python 连接 mysql。
    • pip install pymysql…tar.gz
  • 连接数据库
    • conn=pymysql.connect(host=‘服务器 IP’, port=3306, user=‘用户名’, passwd=‘密码’, db=‘数据库名’, charset=‘utf8’)
    • port=3306,不能加引号,charset='utf8’可省略,此时使用默认端口和字符 集。
  • 用游标读取数据
    • cur=conn.cursor( )
    • sql=select 语句
    • cur.execute(sql)
    • data=cur.fetchall( )
      • 获得数据(元组)
    • cur.close( )
    • conn.close( )
      • 关闭游标和数据库
  • 用游标插入数据
    • conn=pymysql.connect(…)
    • cur=conn.cursor( )
    • sql=‘insert into 表名 values(%d, “%s”)’ % (变量或常量 1,变量或常量 2)
      • %s 必须加引号,%d 可加可不加。
      • (变量或常量 1,变量或常量 2)是元组。
    • cur.execute(sql)
    • conn.commit( )
      • 用于提交数据,不可省略。
    • cur.close( )
    • conn.close( )
  • 批量提交数据
    • 将很多数据写入数据库时,使用循环每次写入数据会导致服务器压力很大,可 以一次性提交批量数据。
    • 列表.append((变量 1, 变量 2, …, 变量 n))
      • 必须加括号,元组存入列表。
    • sql=‘insert into 表名 values(%s, %s, %s, …%s)’
      • 一律使用%s,%s 与变量个数对应,不能加引号。
    • cur.executemany(sql, 列表)
    • conn.commit( )
    • cur.close( )
    • conn.close( )

猜你喜欢

转载自blog.csdn.net/yang_yang_heng/article/details/108454567