selenium环境搭建及基本元素定位方式

Posted 少壮不努力123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium环境搭建及基本元素定位方式相关的知识,希望对你有一定的参考价值。

谷歌驱动下载地址:
 

一、selenium简介

由于requests模块是一个不完全模拟浏览器行为的模块,只能爬取到网页的HTML文档信息,无法解析和执行CSS、JavaScript代码,因此需要我们做人为判断;
1、什么是seleniumselenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法执行javaScript代码的问题。selenium模块本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器;由于selenium解析执行了CSS、JavaScript所以相对requests它的性能是低下的;
2、selenium的用途1)selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用浏览器自动访问目标站点并操作,那我们也可以拿它来做爬虫。2)selenium本质上是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等...进而拿到网页渲染之后的结果,可支持多种浏览器
 

二、selenium的安装与测试

1、下载selenium模块:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium或者在pycharm中下载
2、安装浏览器驱动1) Google浏览器驱动(在下载驱动之前,查看一下chrome浏览器的版本号,如下:
    1)谷歌驱动下载地址:
当然也可以去官网找最新的版本,官网: https://sites.google.com/a/chromium.org/chromedriver/downloads另外注意:把下载好的chromedriver.exe放到python安装路径的scripts目录中即可
    2) firefox浏览器驱动:selenium3默认支持的webdriver是Firfox,而Firefox需要安装geckodriver下载链接:https://github.com/mozilla/geckodriver/releases
 
     3) 测试是否安装成功
from selenium import webdriver
browser=webdriver.Chrome()
 
# # 打开浏览器
browser.get(\'https://baidu.com\')
 
s=browser.find_element_by_id(\'kw\') # 其中kw便是页面中某个元素的id值
print(s)

2.1 设置浏览器驱动

from selenium import webdriver
 
driver = webdriver.Firefox() # Firefox浏览器
driver = webdriver.Chrome() # Chrome浏览器
driver = webdriver.Ie() # Ie浏览器
driver = webdriver.Edge() # Edge浏览器
driver = webdriver.PhantomJS() # PhantomJS()

2.2 Selenium 元素定位

<html>
  <head>
  <body link="#0000cc">
    <a id="result_logo" href="/" onmousedown="return c(\'fm\':\'tab\',\'tab\':\'logo\')">
    <form id="form" class="fm" name="f" action="/s">
      <span class="soutu-btn"></span>
        <input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
 
# 通过 id 定位
dr.find_element_by_id("kw")
 
# 通过name定位:
dr.find_element_by_name("wd")
 
# 通过class name定位:
dr.find_element_by_class_name("s_ipt")
 
# 通过tag name定位:
dr.find_element_by_tag_name("input")
 
# 通过 xpath 定位的几种写法
dr.find_element_by_xpath("//*[@id=\'kw\']")
dr.find_element_by_xpath("//*[@name=\'wd\']"
)dr.find_element_by_xpath("//input[@class=\'s_ipt\']")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class=\'soutu-btn\']/input")
dr.find_element_by_xpath("//form[@id=\'form\']/span/input")
dr.find_element_by_xpath("//input[@id=\'kw\' and @name=\'wd\']")
 
# 通过 css 定位的几种写法
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")
 
# 通过 link_text 定位
dr.find_element_by_link_text("新闻")
dr.find_element_by_link_text("hao123")
dr.find_element_by_partial_link_text("")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")
 
# 如果是定位一组元素,用下面
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()

三、selenium的使用

所谓模拟浏览器基本就是下面的流程:

  1. 请求
  2. 显示页面
  3. 查找元素
  4. 点击可点击元素
所以如何使用selenium找到页面中的标签,进而触发标签事件,就会变的尤为重要
1. selenium选择器
要想定位页面的元素,selenium也提供了一系列的方法。
1) 通过标签id属性进行定位
browser.find_element_by_id(\'kw\') # 其中kw便是页面中某个元素的id值
2) 通过标签name属性进行定位
# 两种方式是一样的
browser.find_element_by_name("wd") # 其中wd是页面中某个元素的name值
3) 通过标签名进行定位
browser.find_element_by_tag_name("img") # img参数表示的就是图片标签img
4) 通过CSS查找方式进行定位
browser.find_elements_by_css_selector("#kw") # 根据选择器进行定位查找,其中#kw表示的是id选择器名称是kw的
5) 通过xpath方式定位
browser.find_element_by_xpath(\'//*[@id="kw"]\') # 参数即是xpath的语法
6) 通过搜索页面中链接进行定位
有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link
browser.find_element_by_link_text("设置")
通过搜索页面中链接进行定位 ,可以支持模糊匹配**
browser.find_element_by_partial_link_text("百度") # 查找页面所有的含有百度的文字链接
 

 

selenium+python之元素定位方式介绍

      网页自动化测试最基本的要求就是要定位到各个元素,然后才能对该元素进行各种操作(输入,点击,清除,提交等),所以今天来总结下Selenuim+Python最基本的几种定位方式及实例说明, 以百度搜索输入框为例,用谷歌浏览器具体说明各个定位方式的用法。

      1.导入selenium包的webdriver方法

     输入 from selenium import webdriver

     2.从 time 模块中引入sleep函数,使用sleep函数可以让程序休眠

     输入 from time import sleep

     3.打开浏览器

    (1)获取浏览器驱动,并打开谷歌浏览器,注意浏览器的第一个字母要大写

      dr=webdriver.Chrome()

    (2)打开被测网页

      url = "https://www.baidu.com/"

      dr.get(url)

     4.元素定位方法

    (1)通过id定位----find_element_by_id()

      实例:dr.find_element_by_id("kw").send_keys("selenium自动化") #输入搜索关键字

      技术分享图片

     注意点:id值必须是唯一的,id值是动态变化的,则不能使用该方法定位。

    (2)通过name定位----find_element_by_name()

      实例:dr.find_element_by_name("wd").send_keys("selenium自动化") #输入搜索关键字

     注意点:name值也必须是唯一的。

    (3)通过class_name定位----find_element_by_class_name()

      实例:dr.find_element_by_class_name("s_ipt").send_keys("selenium自动化") #输入搜索关键字

     注意点:class_name的值也必须是唯一的。

    (4)通过link_text定位----find_element_by_link_text()

      实例:dr.find_element_by_link_text("新闻").click()#点击按钮

     注意点:link_text的值也必须是唯一的。

    (5)通过partial_link_ text模糊文字定位----find_element_by_partial_link_text()

     实例:dr.find_element_by_partial_link_text("改革开放").click() #点击按钮

     注意点:link_text的值也必须是唯一的。

    (6)通过tag_name定位----find_element_by_tag_name()

     实例:dr.find_element_by_tag_name("input").send_keys("selenium自动化") #输入搜索关键字

     标签名字最容易重复,当定位一组数据时,可使用

     inputBoxes = dr.find_elements_by_tag_name("input")

     for inputBox in inputBoxes:

         if inputBox.get_attribute("maxlength") == "255" and
            inputBox.get_attribute("sautocomplete") == ‘off‘:
             inputBox.send_keys("selenum自动化")

    (7)通过xpath定位,XPath是一种XML文档中定位元素的语言----find_element_by_xpath()

     (7.1).根据绝对路径来定位

     path1="/html/body/div/div/div/div/div/form/span/input"

     dr.find_element_by_xpath(path1).send_keys("selenum自动化") #输入搜索关键字

     (7.2).根据元素属性定位

     dr.find_element_by_xpath("//input[@autocomplete=‘off‘]").send_keys("selenum自动化")#输入搜索关键字

     (7.3).根据通过多个属性组合定位

     dr.find_element_by_xpath("//input[@autocomplete=‘off‘ and @id=‘kw‘]").send_keys("selenum自动化")#输入搜索关键字

     注意点:括号内的引号和方括号内的引号不能一样。

     (7.4).通过层次与属性组合定位

     path1 = "//span/input[@class=‘s_ipt‘]"

      dr.find_element_by_xpath(path1).send_keys("selenum自动化")#输入搜索关键字

      8.通过CSS定位----find_element_by_css_selector()

    (8.1).通过class属性

      dr.find_element_by_css_selector(".‘s_ipt").send_keys("selenum自动化")#输入搜索关键字

      注意点:.号表示通过class属性来定位元素

      (8.2).通过id属性定位元素

      dr.find_element_by_css_selector("#kw")

      注意点:#号表示通过id属性来定位元素

      (8.3).通过标签名定位元素

      dr.find_element_by_css_selector("input")

      (8.4)通过属性定位元素(挺常用的)

      dr.find_element_by_css_selector("[name=‘wd‘]")

      dr.find_element_by_css_selector("[maxlength=‘255‘]")

      属性值包含某个值

      属性值包含wd:适用于由空格分隔的属性值。

      dr.find_element_by_css_selector("[name~=‘wd‘]")

     (8.5)通过层级的父子定位元素

     查找有父亲元素的标签名为span,它的所有标签名叫input的子元素

     dr.find_element_by_css_selector("span>input") 

     (8.6)通过层级与属性组合定位

     标签名#id属性值:指的是该input标签下id属性为kw的元素

     dr.find_element_by_css_selector("input#kw")

     标签名.class属性值:指的是该input标签下class属性为s_ipt的元素

     dr.find_element_by_css_selector("input.s_ipt")

     标签名[属性=’属性值‘]:指的是该input标签下name属性为wd的元素

    dr.find_element_by_css_selector("input[name=‘wd‘]")

     父元素标签名>标签名.class属性值:指的是span下的input标签下class属性为s_ipt的元素

     dr.find_element_by_css_selector("span>input.s_ipt")

     9.通过By定位元素

     定位的类型包括By.ID,By.NAME,By.CLASS_NAME,By.TAG_NAME,By.LINK_TEXT,By.PARTIAL_LINK_TEXT,By.XPATH,By.CSS_SELECTOR

     具体定位方式参考上方1-8的说明。

     实例:dr.find_element(By.ID,‘kw‘)

     注意:使用By定位方式,需先导入By类。

     技术分享图片

     5.实例登录QQ邮箱

     #导入selenium包的webdriver方法

     from selenium import webdriver
     #导入By类
     from selenium.webdriver.common.by import By
     #引入sleep函数
     from time import sleep
     #获取浏览器驱动,并打开浏览器
     dr=webdriver.Chrome()
     url="https://mail.qq.com/"
     dr.get(url)
     sleep(2)
     #将浏览器窗口最大化
     dr.maximize_window()
     sleep(2)
     #定位表单位置
     frame = dr.find_element_by_id(‘login_frame‘)
     dr.switch_to.frame(frame)
     dr.find_element_by_id(‘switcher_plogin‘).click()
     #输入用户名密码,并点击登录按钮
     dr.find_element_by_id(‘u‘).send_keys(‘****@qq.com‘)
     dr.find_element_by_id(‘p‘).send_keys(‘password‘)
     dr.find_element_by_id(‘login_button‘).click()
     dr.switch_to_default_content()

 
























以上是关于selenium环境搭建及基本元素定位方式的主要内容,如果未能解决你的问题,请参考以下文章

selenium+python之元素定位方式介绍

基于python实现UI自动化3.2 selenium通过JS定位元素

基于python实现UI自动化3.1 selenium通过By定位元素

自动化测试:Selenium八大元素定位基本介绍

pythonGUI自动化:selenium定位元素方式及元素动作

第三章 selenium元素定位