Python+Selenium(webdriver常用API)_python 版本的webdriver api-程序员宅基地

技术标签: 自动化  Seleniu  

  1. 加载浏览器驱动: webdriver.Firefox()

  2. 打开页面:get()

  3. 关闭浏览器:quit()

  4. 最大化窗口: maximize_window()

  5. 设置窗口参数:set_window_size(600,800)

  6. 后退到前一页: back()

  7. 前进到后一页: forward()

  8. 刷新页面: refresh()

  9. 获得title并打印

      • 1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        # coding:utf-8
        from  selenium  import  webdriver
        title  =  driver.title
        print  title
        #拿当前title名称进行预期比较
        if  title  = =  u "百度一下,你就知道" :
           print  "title yes!"
        else :
        print  "title no!"
         
        #获得当前URL并打印
        url  =  driver.current_url
        print  url
  10. 元素定位:

    • id定位:find_element_by_id()
    • name定位:find_element_by_name()
    • class定位:find_element_by_class()
    • tag定位:find_element_by_tag_name()
    • link定位:find_element_by_link_text()
    • partial link 定位: find_element_by_partial_link_text()
    • Xpath定位:
    1. 绝对路径:find_element_by_xpath("绝对路径")
    2. 元素属性:find_element_by_xpath("//unput[@id='kw']")
    3. 层级与属性结合:find_element_by_xpath("//form[@id='loginForm']/ul/input[1]")
    4. 逻辑运算符:find_element_by_xpath("//input[@id='kw' and@class='s_ipt']")
    • CSS定位:find_element_by_css_selector()

选择器

例子

描述

.class

.intro

Class选择器,选择class=“intro”的所有元素

#id

#firstname

Id选择器,选择id=“firstname”的所有元素

*

*

选择所有元素

Element

P

元素所有<p>元素

Element>element

div>input

选择父元素为<div>元素之后的所有<input>元素

Element+element

Div+input

选择同一级中紧接在<div>元素之后的所有<input>元素

[attribute=value]

[target=_blank]

选择target=”_blank”的所有元素

10.清除文本:clear()

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

12.单击元素:click()

13.提交表单(相当于"回车"):submit()

14.鼠标事件:

ActionChains 类提供了鼠标操作的常用方法:

引入ActionChains类:from selenium.webdriver.common.action_chains import ActionChains

  • perform():执行所有ActionsChains中存储的行为

  context_click()    右击

    ——如:RightClick = driver.find_element_by_id("id")

           ActionChains(driver).context_click(RightClick).perform()

  double_click()    双击

    ——如:DoubleClick = driver.find_element_by_name("name")

           ActionChains(driver).double_click(DoubleClick).perform()

  drag_and_drop(source, target)    鼠标拖放

    ——source:鼠标按下的源元素;target:鼠标释放的目标元素

    ——如:element = driver.find_element_by_name("name")

           target = driver.find_element_by_name("name")

           ActionChains(driver).drag_and_drop(element, target).perform()

  move_to_element()    鼠标悬停在一个元素上(出现下拉列表框)

    ——如:above = driver.find_element_by_xpath("xpath路径")

           ActionChains(driver).move_to_element(above).perform()

  click_and_hold()    按下鼠标左键在一个元素上

    ——如:left = driver.find_element_by_name("name")

           ActionChains(driver).click_and_hold(left).perform()

Python代码:

复制代码
复制代码
# 引入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
# ......
# 定位到要右击的元素
element=driver.find_element_by_css_selector("#kw")
#右击操作
ActionChains(driver).context_click(element).perform()
# ......
复制代码
复制代码

15.键盘事件:

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+(Ctrl+A))

send_keys(Keys.F1)

键盘F1

……

 

send_keys(Keys.F12)

键盘F12

Python代码:

复制代码
# 引入Key模块
from selenium.webdriver.common.keys import Keys
# ......
# ctrl+a全选输入框内容
driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL,'a')
# ......
复制代码

16.元素等待:

(1)显示等待

复制代码
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# ......
element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
# ......
复制代码

(2)隐式等待

from selenium.common.exceptions import NoSuchElementException
# ......
drive.implicitly_wait(10)
# ......

17.定位一组元素:

    • find_elements_by_id()
    • find_elements_by_name()
    • find_elements_by_class()
    • find_elements_by_tag_name()
    • find_elements_by_link_text()
    • find_elements_by_partial_link_text()
    • find_elements_by_xpath()
    • find_elements_by_css_selector()
复制代码
复制代码
# 通过tag name定位元素:driver.find_elements_by_tag_name('option')[1].click()
# 通过xpath定位元素:
driver.find_elements_by_xpath("//input[@type='checkbox']")
# 通过css定位元素:
driver.find_elements_by_css_selector('input[type=checkbox]')
# 使用selector:
slector=Select(driver.find_element_by_css_selector("[name='CookieDate']"))
slector.select_by_index(1)
# slector.select_by_visible_text("留一年")
# slector.select_by_value("1")
复制代码
复制代码

18.多表单切换:switch_to.frame()

19.多窗口切换:switch_to.window()

当前句柄:current_window_handle

所有句柄:window_handles

20.警告框处理:switch_to_alert()

    • text:返回所有alert/confirm/prompt中的文字信息
    • accept():接受现有警告框
    • dismiss():解散现有警告框
    • send_keys(keysToSend):发送文本至警告框

21.文件上传:send_keys()

driver.find_element_by_css_selector(".uploadpic").send_keys(r'E:\picture\s.png')

22.cookie处理:

  • get_cookies():获得所有cookie信息
  • 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信息

23.滚动条设置(2种方式):

复制代码
复制代码
# 使用scrollTop滑动到底部
js = "var action=document.documentElement.scrollTop=10000"
driver.execute_script(js)
# 使用scrollTo设置位置
driver.set_window_size(600, 600)
js = "window.scrollTo(100,450);"
driver.execute_script(js)
复制代码
复制代码

24.窗口截图:get_screenshot_as_file()

25.关闭窗口:close()

26.生成随机数:radint()

转载自:http://www.cnblogs.com/101718qiong/p/8250104.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yetihetao/article/details/79969082

智能推荐

最新遇到了kingcms攻击-有上传文件和创建函数_$power=$mix('',$uri);-程序员宅基地

文章浏览阅读427次,点赞8次,收藏8次。函数创建一个匿名函数,该函数接受两个参数,但在这里只传递了一个空字符串和一个二进制数据字符串。函数将尝试执行字符串"rot13"作为PHP代码,这会导致错误,因为"rot13"不是有效的PHP代码。总的来说:就是通过加密和解密的方式,create_function,并执行了!来执行动态生成的代码通常是不安全的,因为它容易受到代码注入攻击。meiyuan/css/head.php,重点来了!的值,经过ROT13编码后,它会变成"rot13",然后。是一个PHP函数,用于动态地创建一个匿名函数。_$power=$mix('',$uri);

JS 监听滚动条事件_js监听滚动条滚动事件-程序员宅基地

文章浏览阅读1.1w次,点赞4次,收藏13次。JS 监听滚动条事件获取滚动条位置代码监听滚动条方法效果获取滚动条位置代码/*** 获取滚动条位置*/function getScrollTop() { var scrollPos; if (window.pageYOffset) { scrollPos = window.pageYOffset; } else if (document.compatMode && document.compatMode != 'BackCompat'_js监听滚动条滚动事件

面试官:说一下script 标签中 defer(推迟) 和 async(异步) 的区别_script defer-程序员宅基地

文章浏览阅读2k次,点赞15次,收藏12次。script 标签中 defer 和 async 的区别:“在解析HTML文档过程中,defer和async标注的脚本都会立即下载。不同的是……”_script defer

智能电话客服机器人的交互流程_交互机器人项目交付流程-程序员宅基地

文章浏览阅读2.7k次。就目前来说语音对话形式的智能客服机器人已经越来越多。人们想要处理什么事情,电话打到客服中心大多数的第一站是智能客服机器人,实在复杂的才有可能会交给人工客服处理。那么你知道智能电话客服机器人是怎么交互的吗?从交互形式来划分,智能客服包括纯语音(如联信志诚智能客服机器人),纯文本(如小冰),纯可视化界面(如一些电商的客服,完全通过界面交互来完成对话)。交互形式没有好坏,这一点同非AI产品一样,根据用户使用场景选择最合适的形式即可。从产品定义出发,智能客服类产品,最根本的价值在于以低成本取代人工客服工作中大_交互机器人项目交付流程

Nexus-vPC基础实验-程序员宅基地

文章浏览阅读541次。一、实验拓扑:由于条件有限,使用两个N5K做基本的vPC实验,Peer Keepalive Link使用的是两个Nexus 5K的Mgm0接口。二、配置步骤:1、先构建vPC domain,并在domain下定义role优先级、system优先级、PKL。2、然后配置Port-channel作为PL。3、配置vPC成员端口,配置vPC。4、配置Catalyst4500X交换机的Port-c..._nexus vpc

XML文件以及DTD的编写_xml的dtd文件怎么写-程序员宅基地

文章浏览阅读2.8k次。感谢阅读 转载请注明出处:http://blog.csdn.net/SX_csu2016sw1.XML:1.1XML简介:1.1是一种可扩展标记性语言,类似于HTML,设计的宗旨是描述以传输数据,并不是用来显示数据1.2XML标签没有预定义,需要开发人员自己定义1.3XML文件遵循得失W3C于2000发布的XML1.0规范1.2XML用途:常用于Client/Sever之间传输数据,使得_xml的dtd文件怎么写

随便推点

Datagrip连接Oracle_datagrip怎么连接oracle-程序员宅基地

文章浏览阅读681次。datagrip连接oracle报错_datagrip怎么连接oracle

SystemVerilog 验证-测试平台编写指南学习笔记(3):连接设计和测试平台_system verilog unit_test-程序员宅基地

文章浏览阅读1.3k次。文章目录1 为什么需要更高层次的方法连接 Testbench 与 DUT?2 SystemVerilog 接口2.1 什么是接口?2.2 接口怎么连接?2.3 接口的优缺点?3 SystemVerilog 控制通信中时序问题地结构?3.1 使用时钟块控制同步信号地时序4 SystemVerilog 引入的新的时间片的划分方式?5 SystemVerilog 新增的结束仿真的方法?6 接口中时钟块的信号是怎么同步的?7 为什么在程序(program)中不允许使用always块?8 SystemVerilog _system verilog unit_test

2018.11.04 洛谷P2679 子串(线性dp)-程序员宅基地

文章浏览阅读31次。传送门为什么前几年的noipnoipnoip总是出这种送分题啊?这个直接线性dpdpdp不就完了吗?f[i][j][k][0/1]f[i][j][k][0/1]f[i][j][k][0/1]表示当前在第iii个位置,已经匹配到了第jjj个位置,已经使用了kkk段,当前这个字符没用用/用了。然后分情况简单转移一下就行了。注意可以滚动数组优化空..._考虑两个字符串右对齐的最佳解法。例如,有一个右对齐方案中字符串是aaddefgghc和a

Linux压缩与解压缩-程序员宅基地

文章浏览阅读348次,点赞10次,收藏7次。1.常用压缩文件的扩展名有哪些?2.常用的压缩解压缩工具有哪些?3.压缩解压缩工具之间有什么区别?4.常用压缩解压缩命令?

angularjs框架的悬浮提示框实现_angluarjs提示框怎么写-程序员宅基地

文章浏览阅读1.2w次。angularjs框架的悬浮提示框实现第一步:需要添加js引用:第二步:在JS中引用这个控件有的可以这样写:reliers.push("angular-popups");有的可以这样写:angular.module('examples', ['angular-popups']);第三步:写html代码如果只是单个显示那很简单,如下:打开气泡hell_angluarjs提示框怎么写

80%保研er都存在的误区:保本校不需要参加夏令营?_本校保研需要参加夏令营吗-程序员宅基地

文章浏览阅读1.4k次。如果在夏令营期间拿到优营就相当于提前拿到offer了,只需要具备推免资格便可被拟录取为文献中心的研究生,因此对于这些院校而言,夏令营也是拿到offer的机会之一,所以尽管是想保本校,也需要按照学院颁发的通知来参加夏令营。,通过这些学术交流活动,以及穿插其中的一些笔试和面试,会促使专业导师与参营营员之间得到较为深入的交流和了解,保研er在与其他学校的老师的交流过程中可能会碰撞出新的火花,在高校中,即使是同一个专业,也会有很多导师,尽管是本校学生可能也无法很好的了解所有的导师。,看见不一样的学术氛围。_本校保研需要参加夏令营吗

推荐文章

热门文章

相关标签