WebDriver API(selenium模块)

一、定位元素

一共有八种定位元素的方法

  • id定位 -》 find_element_by_id()
  • name定位 -》 find_element_by_name()
  • tag定位 -》 find_element_by_tag_name()
  • class定位 -》 find_element_by_class_name()
  • link_text定位 -》 find_element_by_link_text()
  • partial link定位 -》 find_element_by_partial_link_text()
  • XPath定位 -》 find_element_by_xpath()
  • CSS_selector定位 -》 find_element_by_css_selector()

(一)、Xpath定位

1、绝对路径定位

find_element_by_xpath("/html/body/div/div[2]/from")

其中div[2]就是表示同一级的第二个div标签

2、利用元素属性定位

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

其中//input表示当前页面的某个标签,[@id=‘kw’]表示这个元素的id是kw

find_element_by_xpath("//*[@id='kw']")

其中*表示任意标签
3、层级与属性结合

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

4、使用逻辑运算符

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

5、使用contains方法
contains方法用于匹配一个属性中包含的字符串

find_element_by_xpath("//span[contains(@class, 's-pu')]/input")

6、使用text()方法

find_element_by_xpath("//a[text(),'新闻']")

(二)、用By定位元素

使用By定位时,需要先进行导入

from selenium.webdriver.common.by import By

其效果与find_element_by_一样
方法如下

find_element(By.ID,''kw'')
find_element(By.NAME,'kw')
···

二、控制浏览器

主要包括控制浏览器窗口大小、控制浏览器前进后退和模拟浏览器刷新

from selenium import webdriver
from time import sleep
# 加载对应浏览器驱动,并打开浏览器
driver = webdriver.Chrome()
# 访问百度首页
URL1 = "http://baidu.com"
print("now access %s" % (URL1))
driver.get(URL1)
sleep(2)
# 参数数字为像素
print("设置浏览器宽400,高700")
driver.set_window_size(480, 700)
# 访问新网页
URL2 = "http://bnews.aidu.com"
print("now access %s" % (URL2))
driver.get(URL2)
sleep(2)
# 返回到百度首页
print("back to %s" % (URL1))
driver.back()
# 前进到新闻界面
sleep(1)
print("forward to %s " % (URL2))
driver.forward()
sleep(1)
# 刷新当前界面
driver.refresh()
driver.quit()

三、WebDriver中的常用方法

click()方法、clear()方法、send_keys()方法

from selenium import webdriver
from time import sleep
# 加载对应浏览器驱动,并打开浏览器
driver = webdriver.Chrome()
URL1 = "http://baidu.com"
driver.get(URL1)
# 清除文本
driver.find_element_by_id('kw').clear()
# 输入selenium
driver.find_element_by_id('kw').send_keys("sel")
# 点击搜索按钮
driver.find_element_by_id('su').click()
driver.quit()

submit()方法
其功能远远不及click()方法

from selenium import webdriver
from time import sleep
# 加载对应浏览器驱动,并打开浏览器
driver = webdriver.Chrome()
URL1 = "http://baidu.com"
driver.get(URL1)
# 输入selenium
driver.find_element_by_id('kw').send_keys("sel")
# 点击搜索按钮
driver.find_element_by_id('su').submit()
driver.quit()

size、text、get_attribute(name)、is_displayed()方法

from selenium import webdriver
from time import sleep
# 加载对应浏览器驱动,并打开浏览器
driver = webdriver.Chrome()
URL1 = "http://baidu.com"
driver.get(URL1)
# 获得输入框的尺寸
size = driver.find_element_by_id('kw').size
print(size)

# 返回百度页面底部备案信息
text = driver.find_element_by_id('s-bottom-layer-right').text
print(text)

# 返回元素的属性值
att = driver.find_element_by_id('kw').get_attribute('type')
print(att)

# 返回元素结果是否可见,返回结果为True或False
result = driver.find_element_by_id('kw').is_displayed()
print(result)
driver.quit()

四、鼠标操作

在webdriver中,关于鼠标操作的方法都封装在ActionsChains类中
有以下常用的方法

perform()执行ActionsChains类中存储的所以行为
context_click()右击
double_click()双击
drag_and_drop()拖动
move_to_element()鼠标悬停
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.get("https://www.baidu.cn")

# 定位到要悬浮的位置
above = driver.find_element_by_id("s-usersetting-top")
# 对定位到的元素执行鼠标操作
ActionChains(driver).move_to_element(above).perform()

driver.quit()

五、键盘操作

使用send_keys()方法时,需要先进行以下的导入

from selenium.webdriver.common.keys import Keys

采用方法如下表

方法对应键盘操作
send_keys(Keys.BACK_SPACE)删除键(BackSpace)
send_keys(Keys.SPACE)空格键(Space)
send_keys(Keys.TAB)指标键
send_keys(Keys.ESCAPE)回退键()Esc
send_keys(Keys.ENTER)回车键
send_keys(Keys.CONTROL,‘a’)全选(ctrl +a)
send_keys(Keys.CONTROL,‘c’)复制
send_keys(Keys.CONTROL,‘x’)剪切
send_keys(Keys.CONTROL,‘v’)粘贴
send_keys(Keys.F1)键盘F1
········

六、获取验证信息

这边主要介绍title、current_url和text
title 获取当前标题
current_url 获取当前页面的URL
text 用于获取当前界面的文本信息

from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# 打印当前title/URL
print(driver.title)
print(driver.current_url)

driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()

# 再次打印title/url
print(driver.title)
print(driver.current_url)

# 获取搜索结果条数
num = driver.find_element_by_class_name('nums').text
print(num)
driver.quit()

七、设置元素等待

显式等待

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

其中
driver :浏览器驱动
timeout :最长超时时间,默认以秒为单位
poll_frequency : 检测的间隔时间,默认为0.5s
ignored_exceptions : 超时后的异常信息,默认情况下抛出NoSuchElementException和Exception异常

通常情况下,WebDriverWait方法与until方法或者until_not()方法配合使用

until(method,message='')

调用该方法提供的驱动程序作为参数,知道返回值为True,until_not()方法类似

隐式等待

implicitly_wait()方法

如implicitly_wait(10)方法,表示等待时间为10s,但是不是固定时间(最长等待时间10S),不会影响脚本的运行速度

八、定位一组元素

该方法与定位单个元素非常类似,不同的是当初element多了个s

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.cn")
driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
sleep(2)

# 定位一组元素
texts = driver.find_elements_by_xpath("//div[@tpl='se_com_default']/h3/a")
# 计算匹配结果个数
print(len(texts))
# 循环遍历出每一条搜索结果的标题
for t in texts:
    print(t.text)

driver.quit()

九、多窗口切换

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")

# 获得百度搜索窗口的句柄
search_windows = driver.current_window_handle

driver.find_element_by_link_text('登录').click()
driver.find_element_by_link_text('立即注册').click()

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

# 进入注册窗口
for handle in all_handles:
    if handle != search_windows:
        driver.switch_to_window(handle)
        print(driver.title)
        driver.find_element_by_id("userName").send_keys('username')
        driver.find_element_by_id("phone").send_keys('14502658796')
        sleep(2)

# 回到搜索窗口
driver.switch_to_window(search_windows)
print(driver.title)

driver.quit()

十、警告框与下拉框处理及窗口截图

警告框处理

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com")

# 打开搜索设置
link = driver.find_element_by_link_text('设置').click()
driver.find_element_by_link_text('搜索设置').click()
sleep(2)
# 保存设置
driver.find_element_by_class_name("prefpanelgo").click()
# 获取警告框
alter = driver.switch_to_alert
# 获取警告框的提示信息
alter_text = alter.text
print(alter_text)
# 截取警告窗
alter.accept()
driver.quit()

下拉框处理

from selenium import webdriver
from time import sleep
from selenium.webdriver.support.select import Select


driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com")
# 打开搜索设置
link = driver.find_element_by_link_text('设置').click()
driver.find_element_by_link_text('搜索设置').click()
sleep(2)
# 搜索结果显示条数
sel = driver.find_element_by_xpath("//selector[@id=nr]")
Select(sel).select_by_value('20')
sleep(2)
Select(sel).select_by_visible_text("每页显示50条")
sleep(2)
# 通过下拉框的索引进行选择
Select(sel).select_by_index(0)
sleep(2)
driver.quit()

窗口截图

# 截取当前窗口,指定截图图片的保存位置
driver.save_screenshot("./1.png")

十一、滑动解锁

首页要导入ActionChains类

from selenium.webdriver import ActionChains

水平滑动

# 定位滑块
slider = driver.find_elements_by_class_name("******")
# 加载驱动
action = ActionChains(driver)
# 单击并按下左键
action.click_and_hold(slider).perform()
# 移动滑块
action.move_by_offset(横坐标,纵坐标).perform()

时间上下滑动

# 定位要滑动的年
sl = driver.find_elements_by_class_name("******")
year = sl[0]
action = webdriver.TouchActions(driver)
action.scroll_from_element(year, x, y).perform()

十二、JS调用与HTML视频播放处理

js调用

# 通过js设置浏览器窗口的滚动条
js = 'window.scrollTo(100, 450);'
driver.execute_script(js)

HTML视频播放处理

from selenium import webdriver
from time import sleep



driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com")
video = driver.find_element_by_id("preview-player_html5_api")
# 返回播放文件的地址
url = driver.execute_script("return argument[0].currentSrc;", video)
print(url)

# 播放视频
print("start")
driver.execute_script("argument[0].play()", video)
# 播放15s
sleep(15)

# 暂停视频
driver.execute_script("argument[0].pause()",video)

driver.quit()

十二、Cookie的操作方法

WebDriver操作Cookie的方法主要有如下几种

方法功能
get_cookies()获得所有Cookie
get_cookies()返回字典中的Key为‘name’的Cookie
add_cookie(cookie_dict)添加Cookie
delete_cookie(name,optionsString)删除名为OpenString的Cookie
deldete_all_cookies()删除所有Cookie
# 获得所有cookie
cookie = driver.get_cookies()
# 添加cookie信息
driver.add_cookie({'name':'aaa','value':'bbb'})
# 遍历指定的cookie
for cookie in driver.get_cookies():
    print("%s->%s" % (cookie['name'], cookie['value']))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值