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. 异常DBG_PRINTEXCEPTION_C(0x40010006)和DBG_PRINTEXCEPTION_WIDE_C(0x4001000A)

    简介 DBG_PRINTEXCEPTION_C,代码0x40010006:DBG_PRINTEXCEPTION_WIDE_C,代码0x4001000A:在调试器的控制台窗口打印异常信息/调试信息.它定 ...

  2. 掌握Visual Studio断点

    我知道你现在在想什么.断点?真的吗?关于断点有什么需要掌握的?你按F9然后停在代码行.如果你是这么想的,这篇文章是给你的:继续读 Visual Studio提供了一组相当丰富的断点类型和操作,可以使您 ...

  3. 洛谷 P2253 好一个一中腰鼓! 题解

    P2253 好一个一中腰鼓! 题目背景 话说我大一中的运动会就要来了,据本班同学剧透(其实早就知道了),我萌萌的初二年将要表演腰鼓[喷],这个无厘头的题目便由此而来. Ivan乱入:"忽一人 ...

  4. 转载:深度学习在NLP中的应用

    之前研究的CRF算法,在中文分词,词性标注,语义分析中应用非常广泛.但是分词技术只是NLP的一个基础部分,在人机对话,机器翻译中,深度学习将大显身手.这篇文章,将展示深度学习的强大之处,区别于之前用符 ...

  5. [SDOi2012]Longge的问题(洛谷 2303)

    题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). 输入格式 一个整数,为N. ...

  6. Spring Cloud 升级最新 Greenwich 版本,舒服了~

    去年将 Spring Cloud 升级到了 Finchley 版本: Spring Cloud 升级最新 Finchley 版本,踩了所有的坑! 这个大版本栈长是踩了非常多的坑啊,帮助了不少小伙伴. ...

  7. Mac-搭建Hadoop集群

    You have to work very hard to believe that you are really powerless. Mac-搭建Hadoop集群 我用到了:VMware Fusi ...

  8. sqlException 使用relace 替换单引号

    我们从前端输入数据的时候,可能会输入一些 单引号 ,的字符 导致直接进行执行sql 语句保存的时候出现错误 如: 输入的有 单引号 保存按钮小代码 <asp:Button ID="bt ...

  9. VisualSVN 新版本终于支持一个解决方案下多workcopy了,并解决了上个版本一个重要BUG

    Multiple working copies within a single solution VisualSVN 7.0 and older require the solution file a ...

  10. Apache信息头

    package org.apache.http; public final class HttpHeaders { public static final String ACCEPT = " ...