前言
这是一篇作者在学习selenium库的时候,参考其他大佬写的教学验证自己所学的一个小代码
因此也感受到自动化带来的各种方便性,下面提供给刚入门的朋友作一个参考
用法
selenium的用法、用途、优缺点等等可翻看顶部点击率特别高的几位大佬写的教学
传送门链接:
代码
先上代码,后讲步骤
# !/usr/bin/python3
# -*- coding:utf-8 -*-
# @author:inganxu
# @Date:2021年8月25日
import time #导入time模块,主要是为了自动化过程中需要停顿
from selenium import webdriver #导入selenium
driver = webdriver.Chrome() #实例化浏览器,我用的是Chrome
driver.maximize_window() #窗口最大化
driver.get('https://www.baidu.com') #经典百度,最简单的测试网址
time.sleep(1) #停顿一下,怕网速没加载好就进入下一步
input_baidu = driver.find_element_by_id('kw').send_keys('python') #在搜索框中输入“python”
time.sleep(2) #这里的停顿是代码运行过程中,让你看得更明显
submit_baidu = driver.find_element_by_id('su').click() #点击搜索按钮
time.sleep(2) #停顿一下
CSDN = "window.open('https://blog.csdn.net/');" #定义新的窗口的网址,并且实例化给“CSDN”
time.sleep(2)
driver.execute_script(CSDN) #打开新的窗口,窗口网址是CSDN的官网
time.sleep(3)
handles = driver.window_handles #获取所有窗口句柄,并实例化给“handles”,handles是个集合
time.sleep(1)
driver.switch_to_window(handles[0]) #切换回原来的百度窗口,百度是第一个,所以是handles[0]
time.sleep(1)
driver.find_element_by_id('kw').clear() #清除原来百度窗口的搜索内容
time.sleep(1)
input_baidu2 = driver.find_element_by_id('kw').send_keys('selenium') #输入新的内容,并实例化
time.sleep(2)
submmit_baidu2 = driver.find_element_by_id('su').click() #继续点击搜索按钮
time.sleep(1)
#切换新窗口并输入内容的重点在这里
handle_current = driver.current_window_handle #获取当前窗口句柄(也就是百度窗口)
for i in handles: #设定i是handles的元素
if i!=handle_current: #如果i不等于当前窗口(百度)
driver.switch_to_window(i) #那么就切换到i窗口(也就是新窗口)直接driver.switch_to_window(handles[1])也行
input_sougou = driver.find_element_by_id('toolbar-search-input').send_keys('selenium') #找到csdn的搜索框后输入“selenium”
time.sleep(1)
submit_sougou = driver.find_element_by_id('toolbar-search-button').click() #点击搜索,找不到可以用其他方法来定位,这里用id来定位
time.sleep(3)
#注意:点击搜索后,多了一个窗口,但是,当前的窗口句柄仍然是CSDN的官方,所以关闭的不是新弹出的窗口
driver.close() #关闭当前网页
time.sleep(3)
break
driver.quit() #关闭浏览器,少了这个会有残留进程
代码逻辑
1.打开百度网页
2.输入内容"python",并点击搜索
3.新建窗口,并转到"CSDN"官方
4.切换回百度窗口
5.清除原来的搜索内容
6.输入内容"selenium",并点击搜索
7.再切换回CSDN的窗口
8.输入内容"selenium",并点击搜索
9.关闭当前窗口
10.关闭浏览器
操作步骤
步骤1-2
首先,先找到百度搜索框和点击按钮的定位,如图所示:
从定位上,可以看出,我们可以通过"calss"、"name"、"id"属性来定位,这里用的是id
所以,语法就是这个,并且输入搜索内容"python"
input_baidu = driver.find_element_by_id('kw').send_keys('python')
接下来,再定位"百度一下"这个按钮的位置
这里可以用"id"、"class"属性来定位
定位语法如下
submit_baidu = driver.find_element_by_id('su').click()
打开的页面是这样的
步骤3
新建窗口,并转到csdn
CSDN = "window.open('https://blog.csdn.net/');"
步骤4
获取所有窗口句柄,并实例化给"handles",此时,handles是个集合,因为有两个窗口
切换回百度窗口,百度窗口是第一个窗口,所以是handles[0],列表的第一个元素
handles = driver.window_handles
time.sleep(1)
driver.switch_to_window(handles[0])
步骤5
切换回百度窗口后,清除原来百度搜索窗口的内容
driver.find_element_by_id('kw').clear()
步骤6
输入内容"selenium",并点击搜索
input_baidu2 = driver.find_element_by_id('kw').send_keys('selenium')
submmit_baidu2 = driver.find_element_by_id('su').click()
步骤7
再切换回CSDN窗口
这里使用for循环的形式来切换窗口,首先,先获取当前的窗口句柄
handle_current = driver.current_window_handle
然后再用for循环判断,如果"i"窗口不等于当前窗口(百度),那么就切换到"i"窗口(csdn)
for i in handles:
if i!=handle_current:
driver.switch_to_window(i)
步骤8
如定位百度的方法一样,打开F12开发者工具,用指针定位到CSDN的搜索框和搜索按钮
这是搜索框
还是使用id属性来定位
语法如下
input_sougou = driver.find_element_by_id('toolbar-search-input').send_keys('selenium')
这是搜索按钮
同样用id属性来定位,语法如下
submit_sougou = driver.find_element_by_id('toolbar-search-button').click()
步骤9
当步骤8完成后,会弹出新的窗口,如果需要在这个新的窗口操作的话,那么,就需要把窗口句柄移动到新的窗口中,因为,新增窗口不意味着窗口句柄也跟着变了,我们可以用关闭当前窗口来验证一下
driver.close() #关闭当前网页
关于窗口切换,可以参考下某位大佬写的文章:python selenium打开新窗口与多窗口切换
步骤10
selenium操作完成之后,需要关闭浏览器,不然系统后台还会保留残留的进程
driver.quit()
以上就是通过学习selenium部分功能,自己动手尝试构造一个自动化测试的代码
等到你对seleium、web网页架构都很熟悉之后就可以尝试自动化办公,自动化运行网页等等.....