首页 > 其他分享 >Selenium简介

Selenium简介

时间:2023-08-07 16:12:18浏览次数:44  
标签:web webdriver 简介 Selenium element import find ###

Selenium是一个用于网站应用程序自动化的工具。它可以直接运行在浏览器中,就像真正的用户在操作一样。它支持的浏览器包括IE、Mozilla Firefox、Safari、Google Chrome和Opera等,同时支持多种编程语言,如.Net、Java、Python和Ruby等。

安装

  • 安装Selenium
    pip install selenium
    
  • 安装驱动

使用

初始化

from selenium import webdriver
### 按照什么方式查找
from selenium.webdriver.common.by import By
### 得到一个谷歌浏览器对象
web = webdriver.Chrome('chromedriver.exe')
### 隐式等待:找一个控件,如果控件没有加载出来,等待5s中  等待所有,只需要写着一句,以后找所有控件都按这个操作来
web.implicitly_wait(10)
web.close()   ###关闭

网页元素定位

  • find_element

    • ID 和 NAME
    web.find_element(By.ID,'idname')  ###通过id查找
    web.find_element(By.NAME,'name')  ###通过name查找
    

    通常情况下,一个网页中,元素的id或name的属性值是唯一的,如果多个元素的id或name相同,这种定位方式只能定位第一个元素。

    • CLASS_NAME和TAG_NAME
    web.find_element(By.CLASS_NAME,'classname')  ###通过classname查找
    web.find_element(By.TAG_NAME,'tagname')   ###通过tagname查找
    

    属性class的属性值可以被多个元素使用,同一个元素标签也可以多次使用,正因如此,这两种定位方式只能定位符合条件的第一个元素。

    • LINK_TEXT和PARTIAL_LINK_TEXT
    web.find_element(By.LINK_TEXT,'linktext')   ###超链接载体的精确匹配
    web.find_element(By.PARTIAL_LINK_TEXT,'partiallinktext')    ###超链接载体的模糊匹配
    

    若超链接载体并不是唯一的,那么Selenium也是默认定位第一个符合条件的元素。

    • XPATH和CSS
    web.find_element(By.XPATH,'xpath')   ### xpath选择器
    web.find_element(By.CSS_SELECTOR,'css')   ###css选择器
    

    两者是一个定位选择器,通过标签的路径来实现定位

  • find_elements
    用法与find_element一致,查找到多个元素,结果为列表

网页元素操控

  • 常规操作
    常规操作包含文本清除、文本输入、单击元素、提交表单、获取元素值等

    • send_keys
    web.find_element(By.NAME,"username").send_keys('username')   ###通过name定位输入框,输入username
    
    • clear
    web.find_element(By.NAME,"username").clear()   ###通过name定位输入框,清除输入内容
    
    • text
    web.find_element(By.XPATH,'//*[@id="post_list"]/article[1]/section/div/a').text   ###通过xpath定位,获取文本
    

    • click
    web.find_element(By.NAME,"cookietime").click()   ###通过name定位标签,点击
    
    • submit
    web.find_element(By.TAG_NAME,"button").submit()   ###通过tag_name定位标签,提交
    

其中click和submit在某些情况下可以相互使用,submit只用于表单的提交按钮;click是强调事件的独立性,可用于任何按钮

  • 鼠标事件操作
    鼠标事件操作由Selenium的ActionChains类来实现
    在调用它的时候,其实是不会立即执行,而是会将所有的操作按顺序存放在一个队列里,当你调用perform()方法时,才会按时间顺序会依次执行
    • 鼠标右击和双击
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    web = webdriver.Chrome('chromedriver.exe')
    web.implicitly_wait(5)
    web.get('https://www.2345.com/')
    
    actions = ActionChains(web)   ###拿到动作链对象
    ele = web.find_element(By.LINK_TEXT,'凤凰网')
    actions.context_click(ele).perform()   ###鼠标右击
    actions.double_click(ele).perform()   ###鼠标双击
    time.sleep(5)
    web.close()
    
    • 鼠标操作移动
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.action_chains import ActionChains
    import time
    
    web = webdriver.Chrome('chromedriver.exe')
    web.implicitly_wait(5)
    web.get('https://www.2345.com/')
    
    actions = ActionChains(web)   ###拿到动作链对象
    source = web.find_element(By.LINK_TEXT,'百度')   ###定义原元素
    target = web.find_element(By.LINK_TEXT,'凤凰网')   ###定义目标元素
    actions.drag_and_drop(source,target).perform()   ###鼠标从source移动target
    web.close()
    
  • 组合键简介
    from selenium.webdriver.common.keys import Keys
    ### (根据字面命令解释如下:)先按下ctrl键,发送关键字"t",然后松开Ctrl键
    actions.key_down(Keys.CONTROL).send_keys('t').key_up(Keys.CONTROL).perform()   ###组合键,Ctrl+t 打开新网页
    
    • 附录(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) ——拖拽到某个元素然后松开
    
    drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开
    
    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) ——移动到距某个元素(左上角坐标)多少距离的位置
    
    perform() ——执行链中的所有动作
    
    release(on_element=None) ——在某个元素位置松开鼠标左键
    
    send_keys(*keys_to_send) ——发送某个键到当前焦点的元素
    
    send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素
    

浏览器常用操作

  • 切换iframe
    有时候查找元素报错,显示没有该元素,可以试试切换iframe
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    web.get('https://www.douban.com')
    web.switch_to.frame(web.find_element(By.TAG_NAME,'iframe'))  ###找到tag为iframe,并切换到该iframe下
    web.switch_to.parent_frame()   ###切换回父iframe下
    web.close()
    
  • 获取cookies
    web.add_cookie({})   ###添加cookies
    web.get_cookies()   ###获得cookies
    
  • 选项卡管理
    • 前进
    web.forward()
    
    • 后退
    web.back()
    
    • 打开一个选项卡
    web.execute_script('window.open()')
    
    • 移动一个选项卡
    web.switch_to.window(web.window_handles[1])
    
    • 选项卡内容拉到最后
    web.execute_script('window.scrollTo(0,document.body.offsetHeight)')
    

标签:web,webdriver,简介,Selenium,element,import,find,###
From: https://www.cnblogs.com/yigehulu/p/17606563.html

相关文章

  • Python基础day61 Django choices参数和Ajax技术简介
    choices参数的使用choices是ORM中常用字段的参数作用:类似于一些字段:性别、学历、客户来源、是否上学、是否结婚等有限较少选择的字段我们在表中存储的时候一般使用choices参数,用数字替代文字。案例classCustomer(models.Model):"""客户表"""qq=m......
  • Cilium系列-15-7层网络CiliumNetworkPolicy简介
    系列文章Cilium系列文章前言今天我们进入Cilium安全相关主题,介绍CiliumNetworkPolicies相比于Kubernetes网络策略最大的不同:7层网络策略能力.CiliumNetworkPolicy7层能力CiliumNetworkPolicy与标准NetworkPolicy的最大区别之一是支持L7协议感知规则。在......
  • Cilium系列-15-7层网络CiliumNetworkPolicy简介
    系列文章Cilium系列文章前言今天我们进入Cilium安全相关主题,介绍CiliumNetworkPolicies相比于Kubernetes网络策略最大的不同:7层网络策略能力.CiliumNetworkPolicy7层能力CiliumNetworkPolicy与标准NetworkPolicy的最大区别之一是支持L7协议感知规则。......
  • 爬虫不仅仅selenium自动化,还有这些。。。
    1.DrissionPage这款工具既能控制浏览器,也能收发数据包,甚至能把两者合而为一,简单来说:集合了WEB浏览器自动化的便利性和requests的高效率优点。采用全自研的内核,对比selenium,有以下优点:无webdriver特征,不会被网站识别,无需为不同版本的浏览器下载不同的驱动。运行速度更快,......
  • nacos系列:简介和安装
    目录版本选择安装windows安装centos安装mysql方式存储官网:https://nacos.iogithub:https://github.com/alibaba/nacos或https://kgithub.com/nacos-group/nacos-examplesgitee:https://gitee.com/mirrors/Nacosnacos示例:https://kgithub.com/nacos-group/nacos-examples下载......
  • NFS快速入门(一):简介、原理
    NFS网络文件共享存储什么是NFSNFS是NetworkFileSystem的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同主机系统之间可以共享文件或目录。NFS客户端(一般为web服务器)可以通过挂载(mount)方式将NFS服务器端共享的数据目录挂载到客户端某一个挂载......
  • 【JavaScript01】简介与声明变量
    前言JavaScript是Web的编程语言。所有现代的HTML页面都使用JavaScript。JavaScript简介JavaScript的学习分三个部分:1、核心(ECMAScript):JavaScript的核心,描述了语言的基本语法和数据类型。ECMAScript是一套标准,定义了一种语言的标准与具体实现无关。2、文档......
  • Caddy 入门实战(1)--简介及安装
    Caddy是一款基于Go语言编写的强大且可扩展的平台,可以给你的站点、服务和应用程序提供服务。本文主要内容为Caddy的简介及安装,文中所使用到的软件版本:Caddy2.6.4、CentOS 7.9.2009。1、简介大多数人将Caddy用作Web服务器或代理,但Caddy的本质是诸多服务器的服务器。......
  • Cilium系列-14-Cilium NetworkPolicy 简介
    系列文章Cilium系列文章前言今天我们进入Cilium安全相关主题,介绍Kubernetes网络策略以及CiliumNetworkPolicies额外支持的内容。网络策略(NetworkPolicy)的类型默认情况下,Kubernetes集群中的所有pod都可被其他pod和网络端点访问。网络策略允许用户定义Kuber......
  • Cilium系列-14-Cilium NetworkPolicy 简介
    系列文章Cilium系列文章前言今天我们进入Cilium安全相关主题,介绍Kubernetes网络策略以及CiliumNetworkPolicies额外支持的内容。网络策略(NetworkPolicy)的类型默认情况下,Kubernetes集群中的所有pod都可被其他pod和网络端点访问。网络策略允许用户定义Kube......