• selenium


    webdriver是selenium体系中设计出来操作浏览器的一套API。站在编程语言的角度,webdriver是Python的一个用于实现web自动化的第三方库。

    web页面上一般有输入框、按钮、文字、文字链接、图片、下拉框等等元素,web自动化要做的就是模拟鼠标和键盘来操作这些元素。首先,要找到它们。webdriver提供了8种元素定位方法(常用红色的3种):

    1. id
    2. name
    3. class name
    4. tag name
    5. link text
    6. partial link text
    7. xpath
    8. css selector

    下面分别介绍(用百度首页举例):

     1. id定位 

    id具有唯一性 

    如百度首页上的抗击肺炎链接,找到元素后,复制元素信息,如下:

    <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" name="tj_trvirus" id="virus-2020" class="mnav sp dot">抗击肺炎</a>

    查找元素时,可以按照id查找,如下:

    driver.find_element_by_id('virus-2020').click()

    2. name定位

    name属性不唯一

    有时,页面元素没有ID属性,可以使用name属性来定位,元素如下:

    <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>

    按照name查找,如下:

    driver.find_element_by_name('tj_trnews').click()

    3. class name定位

     通过class来定位“更多产品”按钮,元素如下:

    <a href="http://www.baidu.com/more/" name="tj_briicon" class="bri" style="display: block;">更多产品</a>

    按照class查找,如下:

    driver.find_element_by_class_name('bri').click()

    4. tag name定位

    每一个元素本质上就是一个tag。

    tag往往用来定义一类功能,如<input>、<div>等,所以通过tag识别某个元素的概率很低,很难通过tag区分不同的元素

    如百度一下按钮:

    <input type="submit" id="su" value="百度一下" class="bg s_btn">

    按照tag查找,如下:

    driver.find_element_by_tag_name('input')

    5. link text定位

    link专门用来定位文本链接,通过元素标签对之间的文本信息来定位元素

    如百度首页上方的新闻、地图、视频等,元素如下:

    <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
    <a href="https://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>
    <a href="http://map.baidu.com" name="tj_trmap" class="mnav">地图</a>
    <a href="http://v.baidu.com" name="tj_trvideo" class="mnav">视频</a>
    <a href="http://tieba.baidu.com" name="tj_trtieba" class="mnav">贴吧</a>
    <a href="http://xueshu.baidu.com" name="tj_trxueshu" class="mnav">学术</a>

    通过link定位,如下:

    driver.find_element_by_link_text('新闻').click()
    driver.find_element_by_link_text('hao123').click()

    6. partial link text定位

    partial link是对link的一种补充,有些文本链接的文字比较长,可以取其中的一部分文字定位。如“抗击肺炎”,可以只取“肺炎”来定位

    元素信息如下:

    <a href="https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1" name="tj_trvirus" id="virus-2020" class="mnav sp dot">抗击肺炎</a>

    用partial link定位,如下:

    driver.find_element_by_partial_link_text('肺炎').click()

    7. xpath定位

    xpath是一种在XML文档中定位元素的语言。(HTML可以看做是XML的一种实现)

    在实际项目中,有时候元素没有ID、name这些属性,或者多个元素的name属性相同,又或者每次刷新页面id值都会随机变化,这时,可以使用xpath定位(下面4种方法均可,但一般情况下,在元素信息右键,选择copy xpath,即可自动复制出适合的xpath

    a) 绝对路径

    xpath主要用标签名的层级关系来定位元素的绝对路径,如果一个层级下有多个相同的标签名,则按上下顺序确定位置,如div[2]表示当前层级下的第二个div标签。(下标从1开始计数)

    如,定位百度首页的“新闻”,复制绝对路径为/html/body/div[1]/div[1]/div/div[3]/a[2],定位如下:

    driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[3]/a[2]').click()

    b) 利用元素属性定位

    标签和属性

    如,抗击肺炎的文字链接:(当前页面某个目录下,标签名为a,id=virus-2020的元素)

    也可以用name、class等属性
    driver.find_element_by_xpath('//a[@id="virus-2020"]').click() driver.find_element_by_xpath('//*[@id="virus-2020"]').click() # 如果不想指定标签名,也可以用*星号替代

    c) 层级与属性结合

    如果一个元素本身没有可以唯一标识这个元素的属性值,我们就可以找其上一级元素,或上上一级,一直找到最外层的<html>标签,就是一个绝对路径的写法了

    <span class="bg s_btn_wr">
      <
    input type="submit" id="su" value="百度一下" class="bg s_btn">
    </
    span>

    按照父元素查找百度一下按钮,如下:

    driver.find_element_by_xpath('//span[@class="bg s_btn_wr"]/input').click()

    d) 使用逻辑运算符

     如果一个属性不能唯一的区分一个元素,可以使用逻辑运算符连接多个属性来查找

    <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
    <a href="https://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>

    新闻和hao123的class相同,所以查找新闻,需要多个属性,如下:

    driver.find_element_by_xpath('//a[@name="tj_trnews" and @class="mnav"]').click()

    8. css定位

     css和xpath只掌握一种,即可解决大部分定位问题,so~

  • 相关阅读:
    数据库第1,2,3范式学习
    node.js安装及小例子
    WorkSkill整理之 技能体系
    PTE 准备之 Read aloud
    PTE 准备之 Personal introduction
    PTE准备的时候,用英式英语还是美式英语
    sqlserver2014无法打开报Cannot find one or more components_修复方案
    beego 框架用的页面样式模板
    Go语言开发中MongoDB数据库
    xmind8 破解激活教程
  • 原文地址:https://www.cnblogs.com/xiaochongc/p/12405164.html
Copyright © 2020-2023  润新知