selenium笔记

本文基于“白月黑羽教python”中自动化测试板块的学习,归纳总结并扩展的关于selenium介绍和使用方法。

简介

必要性及原理

selenium作为web自动化测试工具,目前在python爬虫中应用也越来越广泛。其主要应用原理是:通过完全模拟浏览器的操作,比如输入框输入、点击超链接元素、下拉滚动条等等来拿到js渲染之后的代码。
必要性:之前用的requests是对一个页面发送请求,只能获得当前加载出来的部分页面即最初的源代码,动态加载的数据是获取不到的,比如js渲染后的代码、下拉滚轮得到的数据和一些框内隐藏元素等等。

selenium的优点

  1. 免费、灵活
    Selenium不是市场上唯一的自动化测试工具,而是唯一可以与付费产品竞争的免费工具。由于它可以在所有平台上移植,并且通常不需要学习新语言,因此Selenium提供了无与伦比的灵活性。
  2. 广泛语言的支持、浏览器和平台
    支持java、C#、PHP、Python、JavaScript、R等多种语言在Windows、Linux、Mac、iOS多平台操作,同时支持Google、IE,Firefox,Opera,Safari等多种浏览器。
  3. 庞大社区
    Udemy,Lynda.com和Coursera提供了几种学习Selenium的选项。 数百个分步的YouTube教程, 一个关于Quora的主题以及25,000个关注者,以及有关StackOverflow的55k个问题,预示着庞大的社区正在蓬勃发展,这为市场提供了更多的Selenium人才。
  4. 大型插件库
    Selenium可以通过各种插件扩展到其标准功能之外。

selenium的缺点

  1. 需要专业的学习有着陡峭的学习曲线
    ,Selenium不允许进行无代码测试。 无代码测试是当下的一个趋势,测试人员只需要一些测试工具,在交互界面操作即可,但是selenium通过需要对其中一种编程语言有很好的了解。
  2. 没有技术支持
    我们提到了丰富的教程,问题,答案以及指向聊天室的链接,您可以在其中向社区寻求帮助。 不利的一面是,提供帮助的是社区,而不是产品创建者。
  3. 爬取数据的效率低
  4. 环境部署繁琐

环境安装

  1. 下载安装selenium:pip install selenium 或者集成工具添加
  2. 下载浏览器驱动程序:http://chromedriver.storage.googleapis.com/index.html
  3. 查看驱动和浏览器版本的映射关系:
    https://www.cnblogs.com/Summer-skr–blog/p/11715259.html

基本使用

下文只是爬虫简单的使用和xpath方法选择。如果看详细使用方法,请点击这里

浏览器的创建

from selenium import webdriver
wd = webdriver.PhantomJS("驱动器地址")
wd = webdriver.Safari("驱动器地址")
wd = webdriver.Chrome("驱动器地址")
wd = webdriver.Firefox("驱动器地址")
wd = webdriver.Edge("驱动器地址")
wd.quit()               # 关闭浏览器,连同驱动器关闭
wd.close()              # 关闭当前页面

基本访问

wd.get(url) 		#url即为要访问的浏览器地址

选择元素方法

1. 选择元素是selenium的重中之重,告诉浏览器我们选择浏览器的特征
2. 查找元素

 (1)id标签(最常用)
   		 input = wd.find_element_by_id(""),返回对象是web_element对象
 (2) class属性:
            所有 class_name 是a的标签:
            	 wd.find_elements_by_class_name(“a”),没有的话,会返回异常   
            在元素的内容可以用 text 找到
                    for element in elements:
                        print(element.text)
                        
            第一个 class_name 是a的标签:
          	 	wd.find_element_by_class_name(“a”), 没有的话,返回空列表
(3) 标签名:
            wd.find_elements_by_tag_name("span")
        WebElement:
            选择的是元素的内部,即wb.find之后的返回值再次选择

操控元素的方法

	需要提前通过查找元素找到input写入框、button按钮
    在搜索框内输入
        input.send_keys("liyang")
    点击发送请求
        button.click()
        在输入的关键字后面加\n,表示回车输入查找
    获取元素文本内容
        element.text
    获取元素属性
        element.get_attribute("srcid")
        这些属性是放在尖括号中间的内容
    获取整个html文本
        通过选择元素找到第一次所要找的元素框得到element
        element.get_attribute("outerHTML")
    获取元素内部的html文本
        通过选择元素找到第一次所要找的元素框得到element
        element.get_attribute("innerHTML")
    获取在输入框中输入内容
        找到文本框element
        element.get_attribute("value")
    用text不能获取到完整内容需要用到下面的方法:
        element.get_attribute("innerText")

xpath选择元素

绝对路径:从根节点一层层写起,用 / 一层一层写下去
相对路径:不用从跟几点开始写,用 // 写第一个,可以在后面继续追加
方法:find_element(S)_by_xpath()
通配符:
    //div/*   div里面所有的节点
根据class属性选择:
    [@属性值 = “”]
    例如://*[@id= "white"]
        //*[@id] 找到所有属性为 id 不管内容什么的内容
    属性值一定 要写完整
泛式选择
    选择style属性值包含color字符串的页面元素  //*[contains(@style,"color")]
    选择style属性值 以color字符串开头 的页面元素  //*[starts_with(@style,"color")]
    以----结尾  不是用ends_with
按次序选择
    某类型的第几个元素://p[1]  表示p类型的第二个,不是第一个p类型的第二个
    任意类型的第二个:  //div/*[2]
    某个类型的最后一个://p[last()]
            倒数第二个: //p[last()-1]
范围选择:
    选择option类型第1到2个子元素:  //option[position()<=2]
    class属性内容为“multi”  前面限制元素//...
    选择倒数第一个和倒数第二个: //option[position()>=last()-1]
组选择
    //option | //h4    选择所有的option和所有的h4
选择 父节点(必须xpath)
    /..    可以套娃一层层持续
    选择 id 为china的父节点 //*[@id="china"]/..
选择所有 后续兄弟节点
    /following-sibling::
    选择class为single的元素 所有后续兄弟节点://*[@class="single"]/following-sibling::*
选择所有 前面兄弟节点
    /preceding-sibling::
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值