selenium2与python自动化2-元素定位

      Firefox浏览器作为selenium的默认浏览器不是没有道理的,其强大的元素定位能力,能快速有助于开发人员对于关键字的获取。而自动化需要掌握的关键步骤有:获取元素,操作元素,获取返回结果,断言(判断返回结果是否与期望结果一致),生成测试报告。

一、准备环境

  1. 安装Firebug和FirePath,在浏览器设置/添加组件/搜索插件名称
  2. 安装完成浏览器右上角有个爬虫的图标

二、查看页面元素

  1. 点击浏览器右上角爬虫图标
  2. 点击左下角箭头标识
  3. 将箭头标识移动到百度搜索框,输入框高亮
  4. 下方红色区域就是单位到输入框的属性

三、元素定位

从上图中可以得到相应搜索单元的属性,利用单元中元素的属性进行定位


  1. find_element_by_id()

可以看到属性 id ,id ="search-key",通过id属性定位到这个元素,定位到搜索框后,使用send_keys()

#coding:utf-8
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")

#通过id定位搜索框,并输出selenium
driver.find_element_by_id("kw").send_keys("selenium") 
driver.find_element_by_id("su").submit()

driver.implicitly_wait(10)
driver.quit()

     2. find_element_by_name()

可以看到属性name,name="q",通过name属性定位到这个元素

driver.find_element_by_name("q").send_keys("selenium")

但是发现运行结果存在问题,因为name属性不是唯一的,因此无法通过name属性定位到搜索框

     3. find_element_by_class_name()

可以看到属性class="engine-key",通过class属性定位到这个元素

driver.find_element_by_class_name("engine-key").send_keys("selenium")

出现的问题同2中一样,以为class_name属性不具有唯一性,不能直接定位

     4. find_element_by_tag_name()

每个元素都有一个tag标签,如搜索框的tag标签是最前面的input属性,从上图也不难发现,一个页面中有很多tag标签,因此一般不用tag标签进行定位

driver.find_element_by_tag_name("input").send_keys("selenium")

     5. find_element_by_link_text()

定位百度首页上的hao123


有一个href="http://www.hao123.com"的元素,这是一种超链接的表示方法,对于这种元素

#coding:utf-8
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")

#通过超链接定位搜索框,并输出selenium
driver.find_element_by_link_text("hao123").click()

有时间,超链接可能很长,此时可以是用模糊定位,只需要输出部分字符串就可以了,可以使用 

find_element_by_partial_link_text() 进行定位,如果要定位hao123,可以使用o123,但要确保字符在界面中的唯一性

driver.find_element_by_partial_link_text("o123").click()

      6. find_element_by_xpath()

从上面可以看到,在元素定位的时候,难免有重复的,不能保证唯一性,因此除了id,name,tag,class,超链接等属性定位方法,作为最重要的元素定位方法之一的xpath方法进行定位,xpath是一种路径语言


这样就得到了搜索框的xpath路径,复制XPath中的路径进行搜索。

#coding:utf-8
from selenium import webdriver
import time

#打开火狐浏览器
driver = webdriver.Firefox()
driver.maximize_window()
#打开百度
driver.get("https://www.baidu.com/")
#页面加载需要几秒钟的时间
time.sleep(2)
driver.find_element_by_xpath(".//*[@id='kw']").send_keys("python")
driver.find_element_by_xpath(".//*[@id='su']").click()
time.sleep(3)

driver.quit()

     7. find_element_by_css_selector()

css是另一种语法,比xpath更简洁,那如何进行查看呢


#coding:utf-8
from selenium import webdriver
import time

#打开火狐浏览器
driver = webdriver.Firefox()
driver.maximize_window()
#打开百度
driver.get("https://www.baidu.com/")
#页面加载需要几秒钟的时间
time.sleep(2)
driver.find_element_by_css_selector("#kw").send_keys("python")
driver.find_element_by_css_selector("#su").click()
time.sleep(3)

driver.quit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值