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. boost编译指定python版本号

    1.执行如下 bootstrap 语句,会在目录下生成 project-config.jam 文件 .\bootstrap --with-python="C:\Users\yzy\Anaco ...

  2. ElasticSearch的常用API

    ElasticSearch的常用API 1.在服务器上怎么查ES的信息 # 通过使用_cat可以查看支持的命令 ### curl localhost:9200/_cat eg: /_cat/alloc ...

  3. SpringCloud微服务实战——搭建企业级开发框架(五十二):第三方登录-微信小程序授权登录流程设计和实现

      在前面的设计和实现中,我们的微服务开发平台通过JustAuth来实现第三方授权登录,通过集成公共组件,着实减少了很多工作量,大多数的第三方登录直接通过配置就可以实现.而在第三方授权登录中,微信小程 ...

  4. Linux报错:audit: backlog limit exceeded(审计:超出积压限制)

    Linux报错:audit: backlog limit exceeded(审计:超出积压限制) 系统版本:CentOS Linux release 7.6.1810 (Core) 问题现象:一次巡检 ...

  5. VUE3.x之Proxy 我们为什么要使用Proxy

    Object.defineProperty 劫持数据 只是对对象的属性进行劫持 无法监听新增属性和删除属性 需要使用 vue.set, vue.delete 深层对象的劫持需要一次性递归 劫持数组时需 ...

  6. ASP.NET CORE开发 (三)

    1. 在使用singleton时出现 Cannot resolve scoped service 'AlgoTag.Models.AlgoContext' from root provider. ht ...

  7. [GIT]辨析/区别: git reset HEAD 与 git reset --hard HEAD | 版本回撤

    1 场景1: 撤销到远程仓库或本地仓库的最新最近一次的正式版本 1.1 文由 时常有这样一种场景,不小心改动了部分文件,或修改了部分文件却发现无用,此时可能还没有git push,也可能push了:又 ...

  8. ros-python学习样例笔记

    1.通信基本原理介绍 待写 2.三种通信方式的程序样例(python版) 2.1 topic 通信方式(非自定义和自定义) 2.1.1 创建工作空间和topic功能包 在ubuntu中打开命令行,输入 ...

  9. hadoop伪分布式集群的安装(不是单机版)

    准备工作 三台虚拟机,关闭防火墙,关闭selinux 查看防火状态 systemctl status firewalld 暂时关闭防火墙 systemctl stop firewalld 永久关闭防火 ...

  10. 两分钟操作完成用VScode连接MySQL查询数据

    第一步:下载一个插件,MySQL Syntax 安装后要是重启或刷新后没有出现 再安装一个MySQL 第二步:下载vscode-database 第三步:把需要的插件下载好后,接下来就开始操作  输入 ...