selenium-常用webdriver API

WebDriver的原理:

webdriver是按照server-client的经典设计模式设计的。

server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并作出响应。

client就是我们的测试代码。我们测试代码的一些行为,例如打开浏览器,跳转到特定的url等操作是以http请求的方式发送给被测试浏览器的,也就是remote server。remote server接受请求,执行相应操作,并在response中返回执行状态、返回值等信息。

webdriver的工作流程:

a.webdriver启动目标浏览器,并绑定到指定端口。启动的浏览器实例将作为webdriver的Remote server,

b.client端通过CommandExcuter发送HttpRequest给remote server的侦听端口

c.remote server需要依赖原生的浏览器组件(如chromedriver.exe)来转化浏览器的native调用

一 元素定位

二 常见使用

1.操作浏览器

from selenium import webdriver

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
dr.close()
打开浏览器并全屏显示
from selenium import webdriver


driver = webdriver.Chrome("D:/soft/chromedriver.exe")
first_url = 'https://www.baidu.com/'
print("now access %s"%first_url)
driver.get(first_url)

second_url = 'http://news.baidu.com/'
print("now access %s"%second_url)
driver.get(second_url)

print("back to %s"%first_url)
driver.back()

print("forward to %s"%second_url)
driver.forward()

driver.quit()
控制浏览器前进后退
from selenium import webdriver

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
dr.refresh()  # 模拟浏览器刷新
dr.quit()
模拟浏览器刷新

2.简单元素操作

from selenium import webdriver

driver = webdriver.Chrome("D:/soft/chromedriver.exe")
driver.get("http://126.com/")
driver.maximize_window()
driver.find_element_by_css_selector('.u-login-entry').click()
driver.switch_to.frame(0)
driver.find_element_by_css_selector('.j-nameforslide').send_keys('wmm_0165')  # 模拟键盘像输入框输入内容
driver.find_element_by_css_selector('input[name=email]').clear()  # 清楚文本输入得内容
driver.quit()
clear与send_keys
from selenium import webdriver

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')

size = dr.find_element_by_css_selector('input[name=wd]').size  # 获取输入框的尺寸
print(size)
text = dr.find_element_by_css_selector('p:nth-of-type(5)>a').text
print(text)
type = dr.find_element_by_css_selector('input[id=su]').get_attribute('type')  # 获取元素的属性值
print(type)
result = dr.find_element_by_css_selector('input[id=su]').is_displayed()  # 元素结果是否可见,返回False或True
print(result)


输出结果:
{'height': 22, 'width': 526}
使用百度前必读
submit
True
webElement的常见用法

3.鼠标事件

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
shurukuang = dr.find_element_by_css_selector('input[name=wd]')
ActionChains(dr).context_click(shurukuang).perform()  # 鼠标右击
ActionChains(dr).move_to_element(shurukuang).perform()  # 鼠标悬停
ActionChains(dr).double_click(shurukuang).perform()  # 鼠标双击
# ActionChains(dr).drag_and_drop(source,target).perform()  # 鼠标拖放
鼠标操作

4.键盘事件

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')

dr.find_element_by_css_selector('input[name=wd]').send_keys('seleniumm')  # 输入框输入内容
dr.find_element_by_css_selector('input[name=wd]').send_keys(Keys.BACK_SPACE)  # 删除多输入的一个m

time.sleep(2)
dr.find_element_by_id('su').send_keys(Keys.ENTER)  # 通过回车键来代替单击操作

dr.quit()
模拟键盘事件

5.获得验证信息

from selenium import webdriver
dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
print(dr.title)  # 获取当前页面标题
print(dr.current_url)  # 获取当前页面url
dr.quit()

输出结果:
百度一下,你就知道
https://www.baidu.com/
获得验证信息

6.设置元素等待

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
element = WebDriverWait(dr, 5, 0.5).until(EC.presence_of_element_located(("css selector", 'input[name=wd]')))  # ignored_exceptions 超时后的异常信息
dr.quit()
显示等待

7.定位一组元素

8.多表单切换

"""
webdriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。
这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中
"""
from selenium import webdriver

driver = webdriver.Chrome("D:/soft/chromedriver.exe")
driver.get("http://126.com/")
driver.maximize_window()
driver.find_element_by_css_selector('.u-login-entry').click()
dingwei = driver.find_element_by_css_selector('div#loginDiv>iframe')
driver.switch_to.frame(dingwei)  # switch_to.frame()默认可以直接获取表单的id或name属性。如果没有可用给的id和name属性,我们可以自行定位,再将定位对象传递给switch_to.frame()方法
# driver.switch_to.frame(0)
driver.find_element_by_css_selector('.j-nameforslide').send_keys('wmm_0165')  # 模拟键盘像输入框输入内容
driver.find_element_by_css_selector('input[name=email]').clear()  # 清楚文本输入得内容
driver.quit()
多表单切换

9.多窗口切换

"""
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作
"""
from selenium import webdriver
import time

dr = webdriver.Chrome("D:/soft/chromedriver.exe")
dr.maximize_window()
dr.get('https://www.baidu.com')
search_windows = dr.current_window_handle  # 获取当前窗口句柄
dr.find_element_by_css_selector('div#u1>a[name=tj_login]').click()  # 点击登录
time.sleep(2)
dr.find_element_by_css_selector('.tang-pass-footerBarPhoenix+a').click()  # 点击立即注册

all_handles = dr.window_handles  # 获取当前所有打开的窗口的句柄

# 进入注册窗口
for handle in all_handles:
    if handle != search_windows:
        dr.switch_to.window(handle)  # 切换到相应的窗口
        print('now register window!')
        time.sleep(2)

# 回到搜索窗口
for handle in all_handles:
    if handle == search_windows:
        dr.switch_to.window(handle)
        print('now search window!')
        time.sleep(2)

dr.quit()


输出结果:
now register window!
now search window!
多窗口切换

10.警告框处理

11.上传文件

12.下载文件

13.操作cookie

14.调用javascript

15.关闭窗口

driver.quit():退出相关的驱动程序和关闭所有窗口

driver.close():关闭当前窗口

posted @ 2020-03-21 22:35  爱打盹的猫猫  阅读(441)  评论(0编辑  收藏  举报