一,弹窗处理(推荐文章:https://blog.csdn.net/huilan_same/article/details/52298460)

selenium提供switch_to方法定位弹窗的对话框:alert,prompt,confirm

方法一:

  1. a = driver.switch_to.alert # 定位弹窗的对话框
  2. driver.switch_to.alert.accept() # 点击确认
  3. driver.switch_to.alert.dismiss() # 点击取消
  4. driver.switch_to.alert.send_keys('输入内容') # 输入内容
  5. driver.switch_to.alert.text() # 获取对话框文本值

方法二:

使用显式等待,判断alert是否出现(EC.alert_is_present())

  1. from selenium.webdriver.support.ui import WebDriverWait
  2. from selenium.webdriver.support import expected_conditions as EC
  3.  
  4. wait = WebDriverWait(driver, 5)
  5. wait.until(EC.alert_is_present()).accept()
  6. wait.until(EC.alert_is_present()).dismiss()
  7. wait.until(EC.alert_is_present()).send_keys("XXX")
  8. wait.until(EC.alert_is_present()).text()

二,windows弹窗处理

1.定位iframe弹窗

  1. # 切换到iframe中,然后再定位
  2. # 方法一,根据iframe标签的id属性值定位,id唯一
  3. driver.switch_to.frame('frame_id')
  4. # 方法二,根据iframe标签的name属性值定位,name唯一
  5. driver.switch_to.frame('frame_name')
  6. # 方法三,通过索引定位
  7. # index从0开始,传入整型参数即判定为用index定位,传入str参数则判定为用id/name定位
  8. driver.switch_to.frame(1)
  9. # 方法四,根据webelement对象进行定位
  10. driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])

2.frame间的切换

  1. <html>
  2. <iframe id="frame1">
  3. <iframe id="frame2" / >
  4. </iframe>
  5. </html>
  1. # 从iframe回到父html,从ifrme1或iframe2回到父html
  2. driver.switch_to.default_content()
  3. # 能够切换到父iframe元素中,从iframe2回到iframe1
  4. driver.switch_to.parent_frame()

三,窗口间切换

  1. # 获取所有窗口
  2. all_windows = driver.window_handles
  3.  
  4. # 获取当前窗口handle name
  5. current_window = driver.current_window_handle
  6.  
  7. # 方法一
  8. # 切换window,如果window不是当前window,则切换到该window
  9. for window in all_windows:
  10. if window != current_window:
  11. driver.switch_to.window(window)
  12.  
  13. # 方法二
  14. # 切换到最新的窗口
  15. driver.switch_to.window(driver.window_handles[-1])
  16.  
  17. # 关闭新窗口后切回原窗口,在这里不切回原窗口,是无法操作原窗口元素的,即使你关闭了新窗口
  18. driver.close()
  19. driver.switch_to.window(current_window)

四,鼠标操作(参考文档:https://blog.csdn.net/jamieblue1/article/details/89856576 和 module-selenium.webdriver.common.action_chains

ActionChains支持模拟一系列的鼠标操作,例如鼠标移动、鼠标按钮操作、按键操作、上下文交互操作、单击、双击、右键、拖拽等。

1,ActionChains包括的方法

ActionChains类中的操作方法 解析
click(on_element=None) 点击鼠标左键
click_and_hold(on_element=None) 点击鼠标左键不松开
context_click(on_element=None) 点击鼠标右键
double_click(on_element=None) 双击鼠标左键
drag_and_drop(source, target) 拖拽指定元素source,到指定target,并松开
drag_and_drop_by_offset(source, xoffset, yoffset) 拖拽指定元素source到指定的x,y坐标,并松开
key_down(value, element=None) 按下某个键盘上的键
key_up(value, element=None) 松开某个键
move_by_offset(xoffset, yoffset) 鼠标从当前位置移动到某个坐标
move_to_element(to_element) 鼠标移动到指定元素的中间
move_to_element_with_offset(to_element, xoffset, yoffset) 鼠标移动到距离指定元素x,y坐标的位置
pause(seconds) 在指定时间内暂停所有的输入
perform() 执行链中的所有动作
release(on_element=None) 在某个元素位置松开鼠标左键
reset_actions() 清除本地和远程端上已经存储的操作
send_keys(*keys_to_send) 发送某些键到当前焦点的元素
send_keys_to_element(element, *keys_to_send) 发送某些键到指定元素

比如,点击百度页面右上角的【设置->高级设置】

注意:a.c.c的操作只是模拟鼠标移动到元素上,此后便可定位元素并做点击操作

  1. from selenium import webdriver
  2. from selenium.webdriver.common.action_chains import ActionChains
  3.  
  4. # 创建浏览器对象
  5. driver = webdriver.Chrome()
  6. driver.get('https://www.baidu.com')
  7. # 定位设置元素
  8. element = driver.find_element_by_xpath("//div[@id='u1']//a[@name='tj_settingicon']")
  9.  
  10. # 鼠标移动到设置上,其下面的子元素都可以显示出来;鼠标移开的时候,子元素则消失。
  11. # 浏览器无法操作这些元素,可以借助ActionChain对象
  12.  
  13. # a.创建ActionChain对象,控制鼠标
  14. action_chains = ActionChains(driver)
  15. # b.设置动作,此时鼠标还未操作
  16. action_chains.move_to_element(element)
  17. # c.执行动作
  18. action_chains.perform()
  19. # 定位高级搜索,并点击
  20. driver.find_element_by_link_text('高级搜索')
  21. # 关闭浏览器
  22. driver.close()

查看ActionChains模块源码可以发现,ActionChains中的操作方法,会将操作放到self._actions(类型为list)队列中,并返回self实例本身,然后通过perform方法,依次执行队列中的操作。

  1. When you call methods for actions on the ActionChains object,
    the actions are stored in a queue in the ActionChains object.
    When you call perform(), the events are fired in the order they
    are queued up.

    # 支持链式操作
  2. ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()

五,滚动条处操作

使用driver.execute_script(script, *args)方法

  1. # 滚动到最底部
  2. window.scrollTo(0, document.body.scrollHeight)
  3. # 滚动到最顶部
  4. window.scrollTo(document.body.scrollHeight, 0)
  5.  
  6. ele = driver.find_element_by_xpath('')
  7. # 将定位的元素滚动到最顶部
  8. driver.execute_script('arguments[0].scrollIntoView()', ele)
  9. # 将定位的元素滚动到最底部
  10. driver.execute_script('arguments[0].scrollIntoView(false)', ele)
  11. # 将定位的元素滚动到最中间
  12. driver.execute_script('arguments[0].scrollIntoView({behavior: "smooth",
  13. block: "center", inline: "center"})', ele)

六,select标签的下拉框的选择

1.选择

  1. from selenium.webdriver.support.select import Select

    # 创建Select对象,将定位的select元素(WebElement对象)作为参数传过来
  2. select = Select(driver.find_element_by_name("gpc"))
  3.  
  4. # 通过index进行选择,索引从0开始
  5. select.select_by_index(1)
  6.  
  7. # 通过value进行选择
  8. select.select_by_value("a")
  9.  
  10. # 通过选项文字进行选择
  11. select.select_by_visible_text("最近一月")

  12. # 获取所有已选择的元素组成的列表
  13. select.all_selected_options
  14. select.options

2.取消选择,Select提供了四个方法给我们取消原来的选择:

  1. # 去除所有的选择
  2. select.deselect_all()
  3.  
  4. select.deselect_by_index(index)
  5.  
  6. select.deselect_by_value(value)
  7.  
  8. deselect_by_visible_text(text)

3.关于选项的操作

  1. # 获取select元素所有的options
  2. select.options
  3. # 打印select元素中所有的options
  4. for s in select.options:
  5. print(s.text)
  6. # 获取所有被选中的options
  7. select.all_selected_options
  8. # 获取第一个被选中的option
  9. select.first_selected_opt

七,其他操作

  1. # 浏览器前进
  2. driver.forward()
  3. # 浏览器后退
  4. driver.back()
  5. # 浏览器刷新
  6. driver.refresh()
  7. # 窗口最大化
  8. driver.maximize_window()
  9. # 获取标题
  10. driver.title
    # 如果类属型是动态的,可以通过get_attribute获取当前元素的类或者name属性值
    attr = driver.find_element_by_xpath("//div[@class='inner']").get_attribute('class')

selenium常用操作学习笔记的更多相关文章

  1. Numpy np.array 相关常用操作学习笔记

    1.np.array构造函数 用法:np.array([1,2,3,4,5]) 1.1 numpy array 和 python list 有什么区别? 标准Python的列表(list)中,元素本质 ...

  2. mongodb常用命令学习笔记

    mongodb常用命令学习笔记 创建数据库 use DATABASE_NAME eg: use users; 如果数据库不存在,则创建数据库,否则切换到指定数据库.要显示刚刚创建的数据库,需要向数据库 ...

  3. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  4. MySQL4.0命令操作学习笔记

    声明:下列内容并非原创,仅仅是最近学习笔记整理. -------------------------------------- 进入mysql安装路径bin目录下: 1.开启服务 winmysqlad ...

  5. selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码

    目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...

  6. 侠说java8--Stream流操作学习笔记,都在这里了

    前言 首次接触到Stream的时候以为它是和InputStream.OutputStream这样的输入输出流的统称. 流和集合的前世今生 概念的差异 在开发中,我们使用最多的类库之一就是集合.集合是一 ...

  7. Python字符串的常用操作学习

    >>> name = "I love my job!" >>> name.capitalize() #首字母大写 'I love my job! ...

  8. FFmpeg常用命令学习笔记(一)基本信息查询命令

    笔者才开始学习音视频开发,FFmpeg学习笔记系列主要是从慕课网李超老师的FFmpeg音视频核心技术精讲与实战课程学习的心得体会. FFmpeg音视频核心技术精讲与实战:https://coding. ...

  9. 吴裕雄--天生自然java开发常用类库学习笔记:大数操作

    import java.math.* ; class MyMath{ public static double add(double d1,double d2){ // 进行加法计算 BigDecim ...

随机推荐

  1. Appium之定位元素

     常用的appium元素定位工具: (1)Android SDK 中提供的元素定位工具uiautomatorviewer: (2)AppiumDesktop提供的元素定位工具Appium Inspec ...

  2. pytest测试框架 -- 简介

    一.pytest测试框架简介: (1)pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效. (2)pytest框架可以兼容unittest用 ...

  3. linux下限定连接ip和端口

    1.限制端口 vim /etc/ssh/sshd_config 修改连接端口 修改之后重启sshd服务 service sshd restart 再次连接时就需要使用修改后的端口去连接了 备注:判断修 ...

  4. NSThread线程对象

    NSThread 创建线程的方式 准备在后台线程调用的方法 longOperation: - (void)longOperation:(id)obj { NSLog(@"%@ - %@&qu ...

  5. 跟我一起学.NetCore之静态文件处理的那些事

    前言 如今前后端分离开发模式如火如荼,开发职责更加分明(当然前后端一起搞的模式也没有完全褪去):而对于每个公司产品实施来说,部署模式会稍有差别,有的会单独将前端文件部署为一个站点,有的会将前端文件和后 ...

  6. (数据科学学习手札95)elyra——jupyter lab平台最强插件集

    本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 jupyter lab是我最喜欢的编辑器,在过往 ...

  7. 熬夜23天吃透,九大核心专题,成功收割了阿里、百度、美团3家offer

    前言 今年受疫情影响非常大,春招和金三银四都要比往年来得更迟一些.春招结束之后,我特意把自己的面试经历顺了顺,总结出了不少的经验.对了,这次一共收割了3个大厂offer,分别是蚂蚁金服.美团和网易,特 ...

  8. Django ContentType(ORM操作)

    ContentType-设计课程表 # 数据: """ 免费课:Python入门 学位课:Python全栈 价格策略: Linux入门 7 0 Python入门 7 0 ...

  9. Dubbo系列之服务暴露过程

    点赞再看,养成习惯,微信搜一搜[三太子敖丙]关注这个喜欢写情怀的程序员. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系 ...

  10. Java8 新特性lambda表达式(一)初始

    本篇参考Richard Warburton的 java8 Lambdas :Functional Programming for the Masses 学习lambda表达式之前,需要知道什么是函数式 ...