Selenium - 浏览器操作

获取浏览器信息

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com") # 获取当前浏览器名称
print(driver.name) # 获取当前网页的 URL 地址
print(driver.current_url) # 获取当前网页的标题
print(driver.title) # 获取当前网页的源代码
print(driver.page_source)

前进/后退/刷新

from selenium import webdriver

# 浏览器实例化
driver = webdriver.Chrome()
driver.get("http://www.baidu.com") # 进行百度搜索
driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
driver.find_element_by_xpath("//input[@id='su']").click() # 后退
driver.back() # 前进
driver.forward() # 刷新
driver.refresh()

窗口大小设置

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com") # 把浏览器窗口最大化
driver.maximize_window() # 把浏览器窗口最小化
driver.minimize_window() # 设置浏览器窗口大小,长、宽作为参数传递进去,单位:像素
driver.set_window_size(1366, 768) # 获取浏览器大小
size = driver.get_window_size()
print(size)

窗口截图

  • 使用函数 get_screenshot_as_file()

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com") # 保存为本地png图片
    # 图片后缀最好为.png,如果是其他的执行的时候会有警告,但不会报错
    driver.get_screenshot_as_file("D:\\baidu.png")
  • 使用函数 save_screenshot()

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com") # 对当前浏览器打开界面进行截图
    driver.save_screenshot("D:\\baidu.png")

文件上传

参考教程:https://www.cnblogs.com/miki-peng/p/14529433.html

  • 上传有两种情况:

    • input标签:如果上传组件是一个 input 标签,那么定位到元素后,直接使用 send_keys() 方法就可以上传;
    • input标签:如果上传组 非input 标签,则需要借助第三方工具:第三方库 pywin32、第三方工具pyautogui

input标签

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com") # 定位上传文件元素
input_file = driver.find_element_by_id("xxx") # 上传文件
input_file.send_keys(r"D:\learn\xx.txt")

非input标签

TODO:还未遇到这种场景,待学习

标签页切换

  • 在页面中点击某个链接之后,可能就会打开一个新的标签页,Chromedriver驱动是不会主动帮我们去切换。多标签页出现后,如果要做下一步操作,需要先切换浏览器标签页。

      # 获取全部窗口句柄
    handles = driver.window_handles # 获取当前窗口句柄
    handle = driver.current_window_handle # 通过句柄切换窗口
    driver.switch_to.window(handle) # 打开新的标签页
    js = 'window.open("https://www.baidu.com")'
    driver.execute_script(js)
  • 实战操作

      import time
    from selenium import webdriver # 启动Chromedriver,并与Chromedriver开启会话
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.get("http://www.baidu.com") # 点击新闻,新建一个tab标签页
    driver.find_element_by_xpath("//div[@id='s-top-left']/a[1]").click()
    time.sleep(2) # 获取当前标签页句柄
    win = driver.current_window_handle
    print('当前标签页:', win) # 获取当前所有标签页句柄
    # 返回的是一个列表,按照标签页打开的顺序
    wins = driver.window_handles
    print('所有标签页1:', wins) # 切换到第1个标签页
    driver.switch_to.window(wins[0])
    time.sleep(2) # 打开新的标签页
    js = 'window.open("https://www.baidu.com")'
    driver.execute_script(js)
    time.sleep(2) # 再次获取当前所有标签页句柄
    wins = driver.window_handles
    print('所有标签页2:', wins) # 关闭当前标签页
    driver.close()
    # 关闭浏览器,kill掉chromedriver进程
    driver.quit()
  • 封装窗口切换,实现切换到下一个窗口和上一个窗口的功能

    driver = webdriver.Chrome()
    
    def window_forward(driver):
    """自动切换到当前窗口的下一个窗口"""
    a = driver.window_handles
    b = driver.current_window_handle
    k = a.index(b)
    driver.switch_to.window(a[k+1]) def window_back(driver):
    """自动切换到当前窗口的上一个窗口"""
    a = driver.window_handles
    b = driver.current_window_handle
    k = a.index(b)
    driver.switch_to.window(a[k - 1])

    小技巧: list.index(element) 用来获取元素在list中的索引位置,如果元素不存在会抛出异常。

Selenium - 浏览器操作的更多相关文章

  1. 自动化测试基础篇--Selenium浏览器操作

    摘自https://www.cnblogs.com/sanzangTst/p/7462056.html  学习 Selenium 主要提供的是操作页面上各种元素的方法,但它也提供了操作浏览器本身的方法 ...

  2. Java Selenium - 浏览器操作

    浏览器主要操作方法来自接口 org.openqa.selenium.WebDriver , 实现于org.openqa.selenium.remote.RemoteWebDriver这个类,然后不同浏 ...

  3. selenium浏览器操作

    在元素定位中xpath使用的还算比较多,介绍一下常见的firfox和chrome浏览器插件安装 一.浏览器定位工具安装 1.firfox firfox比较简单,主要浏览器自带的定位功能也比较强大国内也 ...

  4. selenium webdriver(1)---浏览器操作

    启动浏览器 如何启动浏览器已在上篇文章中说明,这里还是以chrome为例,firefox.IE启动方式相同. //启动浏览器 import org.openqa.selenium.WebDriver; ...

  5. 第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS

    第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 ...

  6. selenium webdriver操作各浏览器

    描述 本文主要是针对Chrome 62 , firefox57 ,和IE11 三个版本的操作.相关的driver .可点击以下链接.所有的driver 建议放在浏览器的目录下,本文中所有的driver ...

  7. 孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1

    孤荷凌寒自学python第八十五天配置selenium并进行模拟浏览器操作1 (完整学习过程屏幕记录视频地址在文末) 要模拟进行浏览器操作,只用requests是不行的,因此今天了解到有专门的解决方案 ...

  8. selenium 浏览器基础操作(Python)

    想要开始测试,首先要清楚测试什么浏览器.如何为浏览器安装驱动,前面已经聊过. 其次要清楚如何打开浏览器,这一点,在前面的代码中,也体现过,但是并未深究.下面就来聊一聊对浏览器操作的那些事儿. from ...

  9. Selenium常用API的使用java语言之7-控制浏览器操作

    (六)控制浏览器操作 1.控制浏览器窗口大小 有时候我们希望能以某种浏览器尺寸找开,访问的页面在这种尺寸下运行.例如可以将浏览器设置成移动端大小(480* 800),然后访问移动站点,对其样式进行评估 ...

  10. selenium元素和浏览器操作

    click和clear from selenium.webdriver.support.wait import WebDriverWait import time browser = webdrive ...

随机推荐

  1. 统一返回对象Result

    统一返回对象Result 项目中我们会将响应封装成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致.轻松. 一般情况下,统一返回数据格式 ...

  2. 《程序员的自我修养》学习笔记——不一样的hello world【第四弹】

    不一样的hello world Linux 的系统调用 通过glibc提供的库函数 glibc 是 Linux 下使用的开源的标准 C 库,它是 GNU 发布的 libc 库,即运行时库.glibc ...

  3. 分库分表ShardingJDBC最佳实践

    1 添加依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId> ...

  4. java面向对象-基础入门

    java面向对象-基础入门 面向过程:线性思维 面向对象思维:物以类聚,分类的思维 对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是具体到某个微观 ...

  5. Ubuntu18.04二进制安装elasticsearch

    1. 什么是Elasticsearch Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎.Logstash 和 Beats 有助于收集.聚合和丰富您的数据并将 ...

  6. Java面试——SQL语句题

    更多内容,前往IT-BLOG 一.行转列问题 现有表格A,按照以下格式排列: 姓名 收入类型 收入金额 Tom 年奖金 5w Tom 月工资 10k Jack 年奖金 8w Jack 月工资 12k ...

  7. c#动态执行字符串脚本(优化版)

    像javascript中有eval()来执行动态代码,c#中是没有的,于是自己动手丰衣足食, 先来代码 1 using System; 2 using System.Data; 3 using Sys ...

  8. ASP.NET Core - 缓存之内存缓存(上)

    1. 缓存 缓存指的是在软件应用运行过程中,将一些数据生成副本直接进行存取,而不是从原始源(数据库,业务逻辑计算等)读取数据,减少生成内容所需的工作,从而显著提高应用的性能和可伸缩性,使用好缓存技术, ...

  9. OpenTiny 的这些特色组件,很实用,但你应该没见过

    大家好,我是 Kagol,OpenTiny 开源社区运营,TinyVue 跨端.跨框架组件库核心贡献者,专注于前端组件库建设和开源社区运营. 前面给大家介绍了 OpenTiny 快速创建 Vue Ad ...

  10. 补五月五号java基础知识点

    1.容器类:容器类是java以类库的形式供有用户开发程序时可直接使用的各种数据结构.2.java容器框架中有两个名称分别为Collection和Set的接口,为防止名称的冲突,本书将Collectio ...