selenium用法总结

安装配置

命令行下载selenium:pip install selenium

安装浏览器驱动

四大浏览器(IE,谷歌,火狐,edge)驱动下载地址
IE浏览器-IEDriverServer:
http://selenium-release.storage.googleapis.com/index.html
edge-msedgedriver:
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
谷歌浏览器-chromedriver:
http://chromedriver.storage.googleapis.com/index.html
Firefox-geckodriver:
https://github.com/mozilla/geckodriver/releases/

参考:https://blog.csdn.net/zhoukeguai/article/details/113247342

元素定位

id:元素有id属性且唯一(*值若是无序的字母或数字可能是动态id,可能会失效 )

Driver.find_element_by_id("id属性值")

name:元素有name属性且唯一

Driver.find_element_by_name("name属性值")

xpath:相对路径/绝对路径 定位

绝对路径 /:直接子节点【当前属性的下一层】(一层一层搜--范围小使用)

相对路径 //:后代节点【当前属性的上层属性】(直接全局搜--范围大时用)

#语法:方括号里的属性名前要加@ 
#单双引号法则:外单内双 外双内单
find_element_by_xpath('//a[@href="/xxx/xxx"]//img').click()

css selector:根据

Driver.find_element_by_css_selector('input[name="keyWord"]')

定位后的常见操作

get(url) 打开网页

send_keys(str) 输入

click() 点击

clear() 清空

text 获取标签文本内容

get_attribute('属性') 获取元素属性值

close() 关闭当前标签页

quit() 关闭浏览器,释放进程

demo 1(打开谷歌浏览器 搜索框输入):

#UI自动化 selenium
from selenium import webdriver
#打开浏览器 浏览器首字母大写
#r表示里面的内容是非转义的
Driver=webdriver.Chrome(r"C:\Program Files (x86)\Chromebrowser\Chrome.exe")
#浏览器最大化 [放于页面前面,否则不生效]
Driver.maximize_window()
#隐式等待 页面元素加载超10秒报错 关闭浏览器 每0.5秒执行
Driver.implicitly_wait(10)

#打开网页
driver.get("https://www.baidu.com")
#定位搜索框,然后输入内容
#1、ind_element_by_css_selector 元素定位【唯一】
#2、send_keys 给element输入数据
Driver.find_element_by_css_selector('input[name="keyWord"]').send_keys("洗面奶")
#点击 搜索按钮
Driver.find_element_by_css_selector('input["搜索"]').click()

 demo2(跳转登录 进行登录操作):

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("https://www.xxxx.com/")
#设置等待
time.sleep(3)
#用户名
driver.find_element_by_id("loginName").send_keys("admin")
#密码
driver.find_element_by_id("passWord").send_keys("123456")
#点击登录按钮
driver.find_element_by_css_selector('input[onclick="login();"]').click()

浏览器操作

设置浏览器宽和高【在打开页面(.get())代码后面生效,放于前面不生效】

语法:set_window_size(宽度,高度)  如:set_window_size(480,800)

控制浏览器前进(forward())、后退(back())、刷新(refresh())

webdrivec常见方法

submit提交表单

driver.get("https://www.baidu.com")
search_element=driver.find_element_by_css_selector('kw')
#输入内容
search_element.send_keys("123")
time.sleep(3)
#将原来内容清除掉
search_element.clear()
time.sleep(3)
# # time.sleep(3)
# # 后退
# driver.back()
# time.sleep(3)
# # # 前进
# driver.forward()
# time.sleep(10)
# # 刷新当前页面
# driver.refresh()
#再次输入
search_element.send_keys("456")
time.sleep(3)

# #点击百度一下
# driver.find_element_by_id('su').click()
#submit 提交
search_element.submit()

其他的方法 

size:返回元素的尺寸

text:获取元素标签中间的文本

get_attribute(name):获取属性值 如 获取元素标签的value值 get_attribute(value)

is_displayed():审查该元素是否用户可见

button = driver.find_element_by_id('su')
print(button.is_displayed())

鼠标事件

导入:

#鼠标事件
from selenium.webdriver.common.action_chains import ActionChains

1.鼠标提交事件 proform()
调用ActionChains类方法时,不会立即执行,而是将所有操作都存放在一个队列里,当调用perform()方法时,队列里的操作会依次执行。

2.鼠标事件

click(on_element=None):单击
(on_element:指被点击的元素,如果该参数为none,将单击当前鼠标所在位置)

double_click(on_element=None):双击

context_click(on_element=None): 右击

drag_and_drop(source, target):鼠标拖动
Source:鼠标拖动的元素 Target:鼠标释放的目标元素

move_to_element(to_element) :鼠标悬停
to_element:指定元素

move_to_t(to_element) :鼠标移动

perform():提交已保存的操作

# 设置鼠标悬停事件
"""
1、定位元素
2、设置鼠标悬停
"""
# 定位元素
st=driver.find_element_by_id('s-usersetting-top')
# ActionChains(浏览器对象).move_to_element(悬停元素).perform()
ActionChains(driver).move_to_element(st).perform()

键盘事件

导入:

#键盘事件
from selenium.webdriver.common.keys import Keys 

 Keys.BACK_SPACE:回退键(BackSpace)
Keys.TAB:制表键(Tab)
Keys.ENTER:回车键(Enter)
Keys.SHIFT:大小写转换键(Shift)
Keys.CONTROL:Control键(Ctrl)
Keys.ALT:ALT键(Alt)
Keys.ESCAPE:返回键(Esc)
Keys.SPACE:空格键(Space)
Keys.PAGE_UP:翻页键上(Page Up)
Keys.PAGE_DOWN:翻页键下(Page Down)
Keys.END:行尾键(End)
Keys.HOME:行首键(Home)
Keys.LEFT:方向键左(Left)
Keys.UP:方向键上(Up)
Keys.RIGHT:方向键右(Right)
Keys.DOWN:方向键下(Down)
Keys.INSERT:插入键(Insert)
DELETE:删除键(Delete)
NUMPAD0 ~ NUMPAD9:数字键1-9
F1 ~ F12:F1 - F12键
(Keys.CONTROL, ‘a’):组合键Control+a,全选
(Keys.CONTROL, ‘c’):组合键Control+c,复制
(Keys.CONTROL, ‘x’):组合键Control+x,剪切
(Keys.CONTROL, ‘v’):组合键Control+v,粘贴

#定位
search_box = driver.find_element_by_id('kw')
#输入内容
search_box.send_keys("seleniumm")
time.sleep(3)
#调用删除键 删除多的m
search_box.send_keys(Keys.BACK_SPACE)
#Keys.BACK_SPACE只能删一个 多个的话用乘积表示 如删四个字母
search_box.send_keys(4*Keys.BACK_SPACE)

获取断言信息

断言:判断操作是否成功

  • 通过文本信息
    #定位
    search_box = driver.find_element_by_id('kw')
    #输入内容
    search_box.send_keys("python")
    #回车 搜索
    search_box.send_keys(Keys.ENTER)
    time.sleep(3)
    # 获取回车搜索第一页的内容标题
    # find_elements_by_xpath返回的是一组元素的列表
    titles=driver.find_elements_by_xpath('//div[@id="centent_left“]//h3')
    # 遍历列表 
    for t in titles:
        print(t.text)
    #获取当前网页的url
    print(driver.current_url)

设置元素等待:

1.强制等待(无条件等待)

使用方法:time.sleep(delay)

delay的单位为,delay设置多少秒页面就会等待多少秒(死等),这个方法很容易让线程挂掉,使程序抛异常,所以要慎用此方法。

使用举例:打开百度,强制等待5秒

2.隐式等待(无条件等待,在一个时间段内等待)

一次设置,全局生效。
隐式等待设置了一个最长等待时间,在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。如果是只需等待页面中的一个元素加载就用显示等待,等待整个网页加载就用隐式等待。

使用方法:implicitly_wait(delay),delay的单位为秒

使用举例:打开www.qq.com,等待页面加载完成后,点击新闻链接

3.显式等待(有条件等待)

当等待的条件满足后(一般用来判断需要等待的元素是否加载出来),就继续下一步操作。等不到就一直等,如果在规定的时间之内都没找到,那么就跳出Exception。

使用显示等待前需先导入显示等待所需模块和等待条件

#显式等待里元素定位方式要用By加载
from selenium.webdriver.common.by import By
#设置显式等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
"""
WebDriverWait(浏览器driver,最大超时时间,轮询时间)
"""
search_obj=WebDriverWait(driver,5,0.5).until(EC.presence_of_all_elements_located((By.ID,'kw')))
#输入内容
search_obj.send_keys("hello")
#提交
search_obj.submit()

多窗口切换

execute_script() :打开一个新的界面,执行script片段

current_url:然后查看当前页面的url

from selenium import webdriver

driver = webdriver.Chrome()
url = 'https://www.csdn.net/'
driver.get(url)
driver.maximize_window()
# execute_script() 打开一个新页面
driver.execute_script("window.open('https://www.zhihu.com')")
#打印 当前页面 current_url
print(driver.current_url)

当前页面依然还是csdn。要想把当前页面换成知乎,还需要继续用代码切换过来。

 

 

打印 句柄 ,即driver的 window_handles 属性,输出结果如下:

 上面一个列表的形式输出,第一个是csdn,第二个是知乎

switch_to.window():将句柄转为url 【下标确定句柄】

from selenium import webdriver
import time
driver = webdriver.Chrome()
url = 'https://www.csdn.net/'
driver.get(url)
driver.maximize_window()
# execute_script() 打开一个新页面
driver.execute_script("window.open('https://www.zhihu.com')")
#打印 当前页面 current_url
# print(driver.current_url)
# 打印句柄
print(driver.window_handles)
win1 = driver.window_handles[0]
#switch_to.window()将句柄转为url
# current_url 打印出来
driver.switch_to.window(win1)
print(driver.current_url)

time.sleep(2)
win2 = driver.window_handles[1]
driver.switch_to.window(win2)
print(driver.current_url)

 切换页面demo【循环遍历确定句柄】

from selenium import webdriver
import time
#键盘事件 keys类
from selenium.webdriver.common.keys import Keys
#显式等待里元素定位方式要用By加载
from selenium.webdriver.common.by import By
#设置显式等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
obj=driver.find_element_by_id("kw")#搜索
obj.send_keys("马蓉")
obj.send_keys(Keys.ENTER)#回车
# 获取标签页句柄
windowshandle=driver.current_window_handle
print(windowshandle)
driver.find_element_by_xpath('//div[@id="content_left"]/div[1]//h3/a').click()#点击马蓉的百度百科
#强制等待
time.sleep(3)

#获取当前浏览器的所有浏览器的所有窗口的句柄
handles=driver.window_handles
print(handles)
#根据句柄进行切换
for h in handles:
    #如果句柄不等于打开的窗口,则就是第二个
    if h != windowshandle:
         driver.switch_to.window(h)

driver.find_element_by_xpath('//dd[@data-pid="0"]/span[2]/a[2]').click()  # 点击编辑按钮

 iframe表单切换

switch_to.frame():切入内层页面

switch_to.default_content():跳回最外层页面

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(20)
driver.get("https://mail.163.com/")
#iframe表单切换[元素定位不到有可能是iframe嵌套的原因]
"""
switch_to.frame() 中默认可以写 该iframe标签的name和id属性的值,但id和name值要唯一
还可以通过其他定位元素方式,定位到该iframe标签,将其转入switch_to.frame()里
"""
iframe_element=driver.find_element_by_xpath('//div[@id="loginDiv"]/iframe')
driver.switch_to.frame(iframe_element)
time.sleep(3)
driver.find_element_by_xpath('//div[@class="u-input box"]/input[@name="email"]').send_keys("Auguses")
driver.find_element_by_xpath('//div[@class="u-input box"]/input[@name="password"]').send_keys("waedwaeds")
driver.find_element_by_id('dologin').click()


time.sleep(2)
#由于上面的登录操作,是在内存的子页面里,VIP在外层页面,需要切换到外层去
driver.switch_to.default_content()
#点击 VIP
driver.find_element_by_css_selector('a[href="https://vipmail.163.com/?from=fmail"]').click()

 切换到外层页面,跳转到vip登录

 警告框处理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>警告框处理</title>
    <script>
        function alertbutton(){
        alert("123")
        }
        function confirmButton(){
        //msg接受的是确定(true)或者取消(false)
        msg=confirm("点击确认或者取消")
        if(msg){
        alert("点击了确认按钮")
        }else{
        alert("点击了取消按钮")
        }}
        function prompButton(){
        var msg = prompt('输入一个值:','我是默认值')
        if(msg){
           alert('输入的值为:\n'+msg);
        }else{
        alert('输入值为空');
        }
        }
    </script>
</head>
<body>
<!--谷歌网页默认缓存js代码,编辑器中修改后重新运行代码时,网页并没有重新加载js代码。-->
<!--解决方法:关闭谷歌的网页缓存 开发者工具 设置(竖三点)Preferences下滑Network中,勾选Disable cache-->
<input type="button" value="弹框按钮" onclick="alertbutton()" />
<input type="button" value="提示框按钮" onclick="confirmButton()" />
<input type="button" value="输入框按钮" onclick="prompButton()" />
</body>
</html>

1、判断警告框是js写的还是元素

css框:元素定位法

js: 切换到弹框:driver.switch_to.alert

     点击弹框的确认按钮:driver.switch_to.alert.accept()

     点击弹框的取消按钮:driver.switch_to.alert.dismiss()

from selenium import webdriver
import time
import os
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(20)
# pycharm本地的html页面需要进行路径转换拼接
# filepath="file:///"+os.path.abspath("alert1.html") 斜杠不一致
#get(r"file:// + html绝对路径")中的file://不能少
filepath="file:///"+os.path.abspath("alert1.html")
print(filepath)
driver.get(r"file:///D:/pyfiles/PycharmProjects/pythonProject/htmltest/alert1.html")
'''点击弹框按钮'''
# driver.find_element_by_css_selector('input[onclick="alertbutton()"]').click()
# # 切换到alert弹框
# alert_obj=driver.switch_to.alert
# # 获取弹框文本信息
# print(alert_obj.text)
# time.sleep(2)
# # 点击弹窗的确认按钮
# alert_obj.accept()

'''点击提示框按钮'''
# driver.find_element_by_css_selector('input[onclick="confirmButton()"]').click()
# # 切换到alert弹框
# confirm_obj=driver.switch_to.alert
# # 获取弹框文本信息
# print(confirm_obj.text)
# time.sleep(2)
# # 点击弹窗的确认按钮
# #confirm_obj.accept()
# #点击取消按钮
# confirm_obj.dismiss()
# #点击alert框的确定按钮
# confirm_obj.accept()
'''点击默认框按钮'''
driver.find_element_by_css_selector('input[onclick="prompButton()"]').click()
# 切换到alert弹框
promp_obj=driver.switch_to.alert
time.sleep(2)
promp_obj.send_keys("啦啦啦")
time.sleep(2)
# 获取弹框文本信息
print(promp_obj.text)
time.sleep(2)
# 点击弹窗的确认按钮
promp_obj.accept()

下拉框处理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>下拉框选择</title>
</head>
<body>
<select name="sid" id="sid ">
<!--    value值在下拉框选项里一般是唯一的-->
    <option value="o0">------</option>
    <option value="o1">谷歌搜索</option>
    <option value="o2">百度搜索</option>
    <option value="o3">搜狗搜索</option>
    <option value="o4">bing搜索</option>
    <option value="o5">360搜索</option>
</select>
</body>
</html>

导包:from selenium.webdriver.support.ui import Select

进行select类的实例化:select_obj=driver.find_element_by_name("sid")

   方法1:select_by_index() 索引选择 从0开始
   方法2:select_by_value() value值选择
   方法3:select_by_visible_text() 文本选择

from selenium import webdriver
import time
from selenium.webdriver.support.ui import Select
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get(r"file://D:/pyfiles/PycharmProjects/pythonProject/htmltest/下拉框.html")
#进行select类的实例化
select_obj=driver.find_element_by_name("sid")
s1=Select(select_obj)
# 选择下拉框
'''方法1:select_by_index() 索引选择 从0开始
   方法2:select_by_value() value值选择
   方法3:select_by_visible_text() 文本选择
'''
# 索引选择
# s1.select_by_index(1)
# value值选择
# s1.select_by_value('o3')
# 文本选择
s1.select_by_visible_text("bing搜索")

文件上传

上传文件功能是input标签实现的话,
 用元素定位send_keys上传

html;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>upload_file</title>
    <link href="http://cdn.bootcss.com/bootstrap/3.3.8/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<div class="row-fluid">
    <div class="span6 well">
        <h3>upload_file</h3>
        <input type="file" name="file">
    </div>

</div>
</body>
<script src="http://cdn.bootcss.com/bootstrap/3.3.8/css/bootstrap.min.js"></script>
</html>

from selenium import webdriver
import os

driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get(r"file://D:/pyfiles/PycharmProjects/pythonProject/htmltest/upfile.html")
'''上传文件功能是input标签实现的话,
    用元素定位send_keys上传'''
driver.find_element_by_name('file').send_keys(r"D:\111.txt")

 selenium执行Javascript代码

执行js代码:execute_script()

from selenium import webdriver
import os
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
driver.set_window_size(500,600)
"""
浏览器滚动条拖动用js代码拖动
100指水平方向滚动条的距离到左边页面的距离
450指垂直方向滚动条的距离到上页面的距离
"""
time.sleep(3)
js="window.scrollTo(100,450);"
driver.execute_script(js)

浏览器关闭

 close():如果浏览器有多个标签页,只关闭第一个标签页;如果只有一个标签页,会关闭整个浏览器

quit():关闭整个浏览器

from selenium import webdriver
import os
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
time.sleep(3)
driver.find_element_by_xpath('//div[@id="s-top-left"]/a[2]').click()
time.sleep(2)
# driver.close()
driver.quit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值