selenium常见用法

1、打开和关闭浏览器

 打开浏览器
   driver=webdriver.Ie()
   driver=webdriver.Chrome()
   driver=webdriver.Firefox()
关闭浏览器
   driver.close()
 关闭浏览器以及浏览器驱动程序
   driver.quit()

2、打开 Url

 driver.get("url 地址")

3、切换框架/窗口(使用 switch_to 包)

(1)定位到当前聚焦的元素上
      driver.switch_to.active_element()

 

(2)切换到 alert 弹窗
   driver.switch_to.alert()

alert为警告框、confirm为确认框,prompt为输入框

# 获取alert对话框
dig_alert = driver.switch_to.alert
time.sleep(1)
# 打印警告对话框内容
print(dig_alert.text)
# alert对话框属于警告对话框,我们这里只能接受弹窗
dig_alert.accept()
time.sleep(1)

 

(3)切换到某个 frame
   driver.switch_to.frame(index或 name)

    index从0开始

切换到主页面
   driver.switch_to.default_content()

 切换到上一层的 frame
   driver.switch_to.parent_frame()

(4)切换窗口
  driver.switch_to.window(handle)

  如何获取handle?

  通过driver.window_handles  方法获取当前浏览器所有窗口的handle

  通过循环切换窗口判断标题的方法来确定当前窗口是否为目标窗口

  获取当前窗口handle:  driver.current_window_handle

4、页面元素的属性和方法

 获得网页标题
   driver.title()

 获得当前窗口地址栏URL
   driver.current_url

 获得页面元素的文本值(属于属性)
   对象.text

 获得指定属性的值
   对象.get_attribute("属性名")

获取元素对应的HTML片段

   获取整个web元素的HTML片段

   element.get_attribute("outerHTML")

   获取web元素内部子元素的HTML片段

   element.get_attribute("innerHTML")

Select(对象)的操作
  需要导入包:from selenium.webdriver.support.select import Select

 根据索引选择元素
   select_by_index

 根据文本选择元素
   select_by_visible_text

 取消所有选项
    deselect_all()

 取消对应 index 选项
   deselect_by_index()

 取消对应 value 选项
   deselect_by_value()

 取消对应文本选项
   deselect_by_visible_text()

 返回第一个选项
   first_selected_option()

 返回所有的选项
   all_selected_options()

 用于键盘输入数据
   element.send_keys("数据")

 点击元素(支持单选按钮、 复选框、 命令按钮)
   element.click()

5、刷新页面,前进,后退

driver.refresh()

driver.forward()

driver.back()

6、截屏:

截取整个页面:driver.get_screenshot_as_file(img_path)

截取单个元素:  web_element screenshot(img_path)

ele=driver.find_element_by_id("kw")
ele.screenshot("./ele.png")

# img_path是图片路径,类型str

 7、改变窗口大小

 将窗口最大化
   driver.maximize_window()

 将窗口最小化
   driver.minimize_window()

获取窗口大小

   size = driver.get_window_size()

 改变窗口大小(传递宽度和高度,单位是像素)

   driver.set_window_size(1100,size['height'])

 8、滚动屏幕

 js语言:window.scrollBy(250,0) 就是横向滚动250个像素

selenium里面使用js代码

driver.execute_script('window.scrollBy(200,0)')

9、 键盘事件

一、key包提供按键方法

使用必须先引用key包:from selenium.webdriver.common.keys import Keys

键盘事件,在现实操作中我们习惯性的按tab见切换到写一个输入或者元素,Key()类几乎提供所有按键的方法:

 

常用键盘操作
引用方法 对应键盘
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)
send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
send_keys(Keys.F12) 键盘 F12

 

二、使用操作

1.通过回车键代替点击操作

driver.find_element_by_id("su").send_keys(Keys.ENTER)

2.使用ctrl+A 全选操作

driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')

3.删除多输入的一个字符

driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)

4.输入空格+“个性LOVE”

driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys(u"个性LOVE")  # 避免使用的是selenium2报错,这里输入中文时需要加入小写u

5.剪切

driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')

6.粘贴

driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')

 三、显示等待和隐式等待

1、强制等待

time.sleep(5)  强制等待5s

2、隐式等待

driver.implicitly_wait(5)     设置一个等待时间,轮询(默认0.5s)查找元素是否出现,如果没有出现抛异常

作用于所有find_element方法

3、显式等待

 在代码中定义等待条件,当条件发生时才继续执行代码

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

  • driver:浏览器驱动
  • timeout:最长超时时间,默认以秒为单位
  • poll_frequency:检测的间隔(步长)时间,默认为0.5S
  • ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常

WebDriverWait()一般由until()或 until_not()方法配合使用
until(method, message=' '):调用该方法提供的驱动程序作为一个参数,直到返回值为True
until_not(method, message=' '):调用该方法提供的驱动程序作为一个参数,直到返回值为False

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get('http://www.baidu.com')

element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
element.send_keys('selenium')
 

四、常用的操作事件

ActionChains:执行PC端鼠标的点击、双击、右键、拖拽等事件
TouchActions: 模拟PC和移动端的点击、滑动、拖拽多点触控等多种手势操作
 
1、动作链接ActionChains
执行原理:调用ActionChains的方法时,不会立即执行,而是将所有的操作,按顺序放在一个队列里,当你调用perform()方法时,队列中的事件会依次执行。
 
基本用法:
生成一个动作action=ActionChains(driver)
动作添加方法1:    action.方法1
动作添加方法2: action.方法2
调用perform()方法执行(action.perform())
 
具体写法:
(1)链式写法:
ActionChains(driver).move_to_element(element).click(element).perform()
(2)分布写法:
actions=ActionChains(driver)
actions.move_to_element(element)
actions.click(element)
actions.perform()

 

举例:

ActionChains(driver).click(element).perform()#点击
ActionChains(driver).double_click(element).perform() #双击
ActionChains(driver).context_click(element).perform() #右键
ActionChains(driver).move_to_element(element).perform() #将鼠标移动到某个元素上
ActionChains(driver).drag_and_drop(element1,element2).perform() #将元素1移动到元素2上

 

2、TouchActions:可以对h5页面进行操作,实现点击、滑动、拖拽、多点触控、以及模拟手势的各种操作

手势控制:

tap----在指定元素上敲击

double_tap------在指定元素上双敲击

tap_and_hold---------在指定元素上点击但不释放

move-------手势移动指定偏移(未释放)

release-----------释放手势

scroll--------手势点击并滚定

scorll_from_element-----从某个元素位置开始手势点击并滚动(向下滑动为负数,向上滑动为正数)

long_press----------长按元素

flick----------手势滑动

flick_element-----------从某个元素位置开始手势滑动(向上滑动为负数,想下滑动为正数)

perform   执行

'''
    打开百度页面,输入selenium测试,使用TouchActions点击搜索,滑动到底部.并点击下一页
    :return:
    '''
    option=webdriver.ChromeOptions()
    option.add_experimental_option("w3c",False)

    driver = webdriver.Chrome("/Users/grace/selenium/driver/88/chromedriver",options=option)
    driver.get("https://www.baidu.com")
    driver.maximize_window()
    el=driver.find_element_by_id("kw")
    search_ele=driver.find_element_by_id("su")
    el.send_keys("selenium测试")
    TouchActions(driver).tap(search_ele).perform() #点击百度一下
    TouchActions(driver).scroll(0,10000).perform()
    next_ele=driver.find_element_by_xpath("//*[@id='page']/div/a[10]")
    TouchActions(driver).tap(next_ele).perform()
    time.sleep(3)

    driver.quit()

 其他用法可参考:https://www.cnblogs.com/crystal1126/p/12390398.html

 

 

五、调用javascript进行操作

driver.execute_script()

(1)定位某个元素

driver.execute_script("document.getElementById('kw')")

(2)定位元素并获取返回值

element=driver.execute_script("return document.getElementById('kw')")

(3)滑动到页面最底部

driver.execute_script('window.scrollTo(0,10000)')

(4)滑动到页面最顶部

driver.execute_script('window.scrollTo(0,0)')

(5)修改控件的readonly属性

driver.get("https://www.12306.cn/index/")
    driver.execute_script("document.getElementById('train_date').removeAttribute('readonly')")
    time.sleep(2)
    driver.execute_script("document.getElementById('train_date').value='2021-12-30'")
    time.sleep(2)

  

 

posted on 2020-05-08 13:29  crystal1126  阅读(292)  评论(0编辑  收藏  举报

导航