1.元素的定位

  1.id属性定位

实例:   find_element_by_id("kw")

 2.name属性定位,同id一样是属性值

实例:  find_element_by_name("wd")

 3.class属性定位

实例:  find_element_by_class_name("s_ipt")

 4.tag标签名定位

实例: find_element_by_tag_name("input")

 5.link文本链接定位

实例: find_element_by_link_text("新闻")

  partial link通过标签对之间的部分文本信息来定位元素

实例:find_element_by_partial_link_text("部分文本信息")

 6.XPath 定位

绝对路径定位   (div[2]表示当前层级下的第二个div)

实例:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")

利用元素属性定位,元素的任意属性都可以使用,*表示任意标签名。

实例:find_element_by_xpath("//input[@id='kw']")

find_element_by_xpath("//*[@type='submit']")

层级与属性的结合,通过上一级或上几级的属性进行定位查找

实例:find_element_by_xpath("//span[@class='bg s_ipt_wr']/input")

find_element_by_xpath("//form[@id='form']/span[2]/input")

使用逻辑运算符and,多个属性来查找元素。

实例:find_element_by_xpath("//input[@id='kw' and @class='su']/span/input")

  Firebug前端调试工具 和 FirePath插件可以方面的辅助生成XPath语法

 7.css定位

   通过class属性定位,用(.)表示

实例:find_element_by_css_selector(".s_ipt")

通过id属性定位。用(#)表示

实例:find_element_by_css_selector("#kw")

通过标签名定位

实例:find_element_by_css_selector("input")

通过父子关系定位

实例:find_element_by_css_selector("span>input")

通过属性定位  title=move mouse here  或者title$=here或者title*=mouse

实例:find_element_by_css_selector("input[title^=move]")

组合定位

实例;find_element_by_css_selector("form.fm>span>input#kw")

2.控制浏览器的大小,后退,前进,刷新。

from selenium import webdriver
driver = webdriver.Firefox()
driver.set_window_size(480,800)          (大小)
driver.get("https://www.baidu.com/")
print("百度首页")
driver.get("http://news.baidu.com/")
print("百度新闻")
driver.back()                                       (后退)
driver.forward()                                   (前进)
driver.quit()                                        (退出)

driver.refresh()                                    (刷新)

3.简单的元素操作

.clear():清楚文本

.send_keys("*value"):模拟按键输入

.click():单击元素

.submit():提交表单    webelement接口常用方法,远不及click()广泛

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.126.com/")
driver.find_element_by_id("idInput").clear()
driver.find_element_by_id("idInput").send_keys("username")
driver.find_element_by_id("pwdInput").clear()
driver.find_element_by_id("pwdInput").send_keys("password")
driver.find_element_by_id("loginBtn").click()
driver.quit()
 
driver.find_element_by_id("query").submit()

 

.size:返回元素的尺寸
.text:获取元素的文本
.get_attribute('name'):获取属性值
.is_displayed():获取该元素是否用户可见
 
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
size = driver.find_element_by_id('kw').size
print(size)
text = driver.find_element_by_id('cp').text
print(text)
attribute = driver.find_element_by_id('kw').get_attribute('type')
print(attribute)
result = driver.find_element_by_id('kw').is_displayed()
print(result)
driver.quit()
4.鼠标事件

一. 1. 引入ActionChains类才可以进行鼠标操作

  from selenium.webdriver.common.action_chains import ActionChains
     perform():对整个动作的提交动作
    context_click():右击
    double_click():双击
    drag_and_drop():拖动
    move_to_element():鼠标悬停
 2.定位到目标元素
   click = driver.find_element_by_id("XX")

 3.进行鼠标操作
   ActionChains(driver).context_click(click).perform()
   双击和悬停同右击用法一样
 二.鼠标拖放的操作 
1. 定位到原位置
   element = driver.find_element_by_id("xx")

2. 定位到目标位置
   target = driver.find_element_by_id("yy")

3. 执行拖放操作
   ActionChains(driver).drag_and_drop(element,target).perform()
5.键盘事件
  引入keys模块
from selenium.webdriver.common.keys import Keys
 输入内容
driver.find_element_by_id("kw").send_keys("selenium")
删除键
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
空格+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("教程")
全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
剪切输入框的内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
粘贴内容到输入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
回车键代替单击操作
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
send_keys(Keys.TAB): 制表键
send_keys(Keys.ESCAPE):回退键
send_keys(Keys.F1): 键盘F1

6.获得验证信息

通常用的最多的验证信息是title.URL.text

title:1.打印当前title和URL

title = drive.title

print(title)

now_url=driver.current_url

print(now_url)

2.执行126邮箱登陆的操作

。。。。。。。。。

3.再次打印当前title.URL和text

title = drive.title

print(title)

now_url=driver.current_url

print(now_url)

user= driver.find_element_by_id(“spnUid”).text

           print(user)
结果:title和URL都发生了变化,text可以获取用户文本,是很好的验证信息。
7.设置元素等待
显示等待:引入WebDriverWait,第2,3,4行
WebDriverWaituntil_not()同.until()或者until_not()配合使用
presence_of_element_located:预期判断方法。之外还有很多种
from selenium import webdriver
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.Firefox()
driver.get("https://www.baidu.com")
element =WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw")))
element.send_keys('selenium')
driver.quit()
 
is_displayed():判断元素是否可见:也是预期判断的方法
from selenium import webdriver
from time import ctime,sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
print (ctime())
for i in range(10):
try:
el = driver.find_element_by_id("kw22")
if el.is_displayed():
break
except:pass
sleep(1)
else:
print("time out")
driver.close()
print(ctime())
隐式等待:
引入: NoSuchElementException
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com/")
try:
print(ctime())
driver.find_element_by_id("kw").send_keys("selenium")
except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
sleep:修眠方法
from time import sleep
sleep(1)
8.定位一组元素
1.打开本地html文件,需要用到os模块,引入os模块
import os
2.定位文件
file_path = 'file:///' + os.path.abspath("checkbox.html")
3.从所选文件中定位一组元素 
inputs = driver.find_elements_by_tag_name("input")
input.click()全选
部分选取
for i in inputs:
    if i.get_attribute('type') = = 'checkbox':
        i.click()
打印所有的input元素的个数
print(len()inputs)
去掉所选元素的最后一个钩pop()   pop(0):选择第一个
driver.find_elements_by_tag_name("input").pop().click()
9.多表单的切换switch_to.frame():切换表单
1,引入os模块,然后定位当前路径下的文件,找到从文件中插入表单
     import os
     file_path = 'file:///' + os.path.abspath("checkbox.html")

 2.切换到表单iframe(id=“if”),switch_to.frame():可以直接取表单的id或name属性

    如果iframe没有可用的id或name属性,可以先通过xpath定位,然后将值传给switch_to.frame()

1.  driver.switch_to.frame("if")

   2.xf = driver.find_element_by_xpath('//*[@class="if"]')
      driver.switch_to.frame("xf")    
 3.跳出离它最近的表单switch_to.parent_content()
      driver.switch_to.parent_content()
 4.跳回最外层的页面switch_to.default_content()
      driver.switch_to.default_content()
10.多窗口的切换
  1.打开百度首页,获得当前百度首页的句柄current_window_handle
    sreach_windows = driver.current_window_handle
  2.打开第二个窗口,注册窗口,找到登陆元素.click(),找到注册元素.click()
  3.获得所有的窗口句柄:window_handles
     all_handles = driver.window_handles
  4.for handle in all_handles:
         if handle != sreach_windows:
             driver.switch_to_window(handle)   切换到注册窗口
        if handle = sreach_windows:
             driver.switch_to_window(handle)   回到搜索窗口
11.警告框处理
    使用switch_to_alert()方法定位到alert/confirm/prompt警告/确认/提示,
    然后使用text/accept/dismiss/send_keys等方法进行操作。
    text:返回alert/confirm/prompt中的文字信息
    accept():接受现有警告框
    dismiss():解散现有警告框
    send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框
实例:接受警告框
    driver.switch_to_alert().accept()
12.上传文件send_keys()实现上传
 1.引用os模块,找到当前路径下的html文件
    file_path = 'file:///' + os.path.abspath('upfile.html')
    driver.get(file_path)
 2.定位file_path文件中的上传按钮,添加本地文件
    driver.find_element_by_name('file').send_keys('D:\\upload_file.txt')
  还可以通过autoit实现上传  (不建议使用此种方法)
13.下载文件(只针对Firefox浏览器)不同的浏览器设置方法不同
为了让Firefox浏览器能实现文件的下载,需要通过对FirefoxProfile()做一些设置
1.  ("browser.download.folderList",2)
 设置成0代表下载到浏览器默认下载路径,设置成2则可以保存到制定目录。
2.("browser.download.manager.showWhenStarting",False)
 是否显示开始;True为显示,False为不显示
3.browser.download.dir
  用于指定所下载文件的目录。
  os.getcwd()
  不需要传递参数,用于返回当前目录
 4.browser.helperApps.neverAsk.saveToDisk
  指定要下载页面的Content-type值,HTTP Content-type常用对照表:http://tool.oschina.net/commons
   application/octet-stream
  为文件类型
from selenium import webdriver
import os
fp = webdriver.FirefoxProfile()
 
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir",os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")

driver = webdriver.Firefox(firefox_profile=fp)

driver.get("http://prpi.python.org/pypi/selenium")
driver.find_element_by_partial_link_text("selenium-2").click()
14.操作cookie  读取,添加和 删除cookie信息
 cookie的数据是以字典的形式进行存放的
 cookie = driver.get_cookies():获得所有的cookie信息
 cookie = driver.get_cookie("name"):返回字典中key为'name'的cookie信息
 add_cookie(cookie_dict):添加cookie。“cookie_dict”指字典对象,必须有name和value值(相当于记住密码)
 delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是
                                                   该cookie的选项。目前支持的选项包括“路径”,“域”
 delete_all_cookies():删除所有cookie信息
 实例:向cookie的Name和value中添加会话信息
         driver.add_cookie({'name':'key-aaaaa','value':'value-bbbbb'})
         for cookie in driver.get_cookies():
             print("%s ->%s" %(cookie['name'],cookie['value']))
15.调用javaScript来控制浏览器的滚动条 或者向页面中的text area
     文本框输入内容
 execute_Script():来执行javaScript代码
 window.scrollTo():设置浏览器窗口滚动条的水平和垂直位置,第一个表示水平的左间距,第二个表示垂直的上边距。
实例:
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.set_window_size(600,600)
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(5)
js = "window.scrollTo(100,450);"
driver.execute_script(js)
sleep(5)
driver.quit()
向页面中的text area 文本框输入内容

1.定义要输入的内容text
2.对文本框进行定位
3.将text与javaScript代码通过“+”进行拼接。目的:为了使输入的内容变得可自定义
4.通过execute_Script()执行javaScript代码

text = “input text”
js = "var sum=document.getElementById('id'); sum.value='" + text + "';"
driver.execute_Script(js)
16.处理html5的视频播放
  WebDriver支持在指定的浏览器上测试HTML5,如果使用javaScript来测试这些功能就可以在任何浏览器上测试HTML5了。
  arguments[]:包含了函数调用的参数数组,[0]表示取对象的第一个值
  currentSrc:返回音频视频的url。若果未设置音频视频,则返回空字符串
  load(),play(),pause()控制着视频的加载播放暂停
 1.打开播放器页面
 driver.get("http://videojs.com/")
 2.定位到播放文件
 video = driver.find_element_by_xpath("body/setion[1]/div/video")
 3.返回播放文件的地址
 url = driver.execute_script("return arguments[0].currentSrc;",video)
 print(url)
 4.播放视频
 driver.execute_script("return arguments[0].piay()",video)
5.暂停视频
driver.execute_script("arguments[0].pause",video)
17.窗口截图
 get_screenshot_as_file:截取当前窗口
 driver.get_screenshot_as_file("D:\\pyse\\baidu_img.jpg")   保存的位置
18.关闭当前窗口
close():关闭当前窗口
19.验证码的处理
 设置万能验证码
 引入randint()函数,用于生成随机整数
from random import randint
 
verify = randint(1000,9999)
print("生成的随机数:%d",%verify)
 
number = input("请输入随机数:")
print(number)
number = int(number)
 
if number == verify:
    print("登录成功")
elif number == 132741:
    print("登录成功")
else:
    print("验证码输入有误")
 
记录kookie(相当于记住密码)
 访问xx网站
driver.get("http://www.xx.com")
 将用户名密码写入浏览器cookie
 driver.add_cookie({'name':'login_username','value':'username'})
 driver.add_cookie({'name':'login_passwd','value':'passwd'})

 再次访问xx网站,将会自动登陆

 driver.get("http://www.xx.com")

20.webdriver的原理

 
 
 
 
 
 
 
 
 
 

webdriver 属于selenium 体系中设计出来操作浏览器的一套API的更多相关文章

  1. 『心善渊』Selenium3.0基础 — 3、使用Selenium操作浏览器对象的基础API

    目录 1.导入Selenium库 2.创建浏览器对象 3.浏览器窗口大小设置 4.浏览器位置设置 5.请求访问网址 6.浏览器页面前进.后退和刷新 7.关闭浏览器 相比于高大上的各种Selenium进 ...

  2. selenium+python自动化之操作浏览器

    一.打开网站 1.第一步:从selenium里面导入webdriver模块 2.打开Firefox浏览器(Ie和Chrome对应下面的) 3.打开百度网址 二.设置休眠 1.由于打开百度网址后,页面加 ...

  3. Selenium with Python 006 - 操作浏览器

    #!/usr/bin/env python # -*- coding: utf-8 -*- from selenium import webdriver import time driver = we ...

  4. java selenium (十) 操作浏览器

    本篇文章介绍selenium 操作浏览器 阅读目录 浏览器最大化 前进,后退, 刷新 public static void testBrowser(WebDriver driver) throws E ...

  5. [Python爬虫]使用Selenium操作浏览器订购火车票

    这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分 [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium) [Python爬虫]使用Python爬取静态网页-斗 ...

  6. selenium操作浏览器的前进和后退

    前进关键字:driver.forward() 后退关键字:driver.back() 测试对象:1.https://www.baidu.com/ 2.https://www.sogou.com/ 实例 ...

  7. 爬虫模块介绍--selenium (浏览器自动化测试工具,模拟可以调用浏览器模拟人操作浏览器)

    selenium主要的用途就是控制浏览器,模仿真人操作浏览器的行为 模块安装:pip3 install selenium 需要控制的浏览器 from selenium import webdriver ...

  8. 第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求

    第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求 selenium模块 selenium模块为 ...

  9. No.1 selenium学习之路之浏览器操作

    selenium基础,首先就是浏览器的相关操作 下面描述几种浏览器的常用操作 1.打开浏览器 webdriver后面添加想要打开的浏览器 Ie或者Chrome 2.打开指定页面(百度) 3.休眠时间 ...

随机推荐

  1. SimpleDateFormat 中的yyyy-MM-dd HH:mm:ss.SSS说明

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 转换的格式:yyyy是完整的西元年,MM是月份, ...

  2. LeetCode 641. Design Circular Deque

    原题链接在这里:https://leetcode.com/problems/design-circular-deque/ 题目: Design your implementation of the c ...

  3. Redis有哪些数据结构

    String 这应该是应用最广泛的了,简单的 key-value 类型.value 不仅可以是 String,也可以是数字.还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模 ...

  4. flex布局整理以及demo

    flex: 概念: flex容器: display:flex flex项: 轴:水平的主轴.垂直的交叉轴 容器的属性: 1. flex-direction(决定主轴的方向.即项目的排列方向) 1.1 ...

  5. VUE温习:内存泄漏、Vue.$set、key作用与虚拟diff算法

    一.内存泄漏 1.指令绑定了事件,却没有解绑事件,容易产生内存泄漏.(曾经遇到过的案例) 2.v-if指令产生内存泄漏,比如v-if删除了父级元素,却没有删除父级元素里的dom片段 3.跳转到别的路由 ...

  6. 一元n次方程为什么至多有n个实根

    任意一个n次多项式都可以分解成n个一次多项式的乘积.例如,对于三次多项式来说,那就可以分成三个一次式的乘积,也就是说,三次方程最多有三个根. 需要注意的是,最少的话可能一个实根都没有,如\(f(x)= ...

  7. 《Linux就该这么学》培训笔记_ch18_使用MariaDB数据库管理系统

    <Linux就该这么学>培训笔记_ch18_使用MariaDB数据库管理系统 文章最后会post上书本的笔记照片. 文章主要内容: 初始化MariaDB服务 管理用户以及授权 创建数据库与 ...

  8. Maven 教程(18)— 利用 Profile 构建不同环境的部署包

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79776257 接上回继续,项目开发好以后,通常要在多个环境部署,象我们公司多达5 ...

  9. Python【每日一问】20

    问: [基础题]: 企业发放的奖金根据利润提成.利润(I): 低于或等于10万元时,奖金可提10%: 高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%: ...

  10. AKKA HTTP 简单示例

    AKKA HTTP 简单示例 依赖包: compile("com.typesafe.akka:akka-http_2.13:10.1.8") compile("com.t ...