zoukankan      html  css  js  c++  java
  • selenium2学习:浏览器操作:单元素定位&一组元素定位

    如百度搜索框:

    <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

    百度新闻链接:

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

    1.1.1      普通定位

    id:find_element_by_id(“kw”)

    name: find_element_by_name(“wd”)

    class:find_element_by_class_name(“s_ipt”)

    tag:find_element_by_tag_name(“input”)(同按钮一样,一般不用)

    link:find_element_by_link_text(“新闻”)

    partial link:find_element_by_ partial_link_text(“闻”)(取文本链接中的一部分内容)

    1.1.2      Xpath定位

    1.1.2.1       绝对路径

    从/html至input。

    1.1.2.2       元素属性

    复制xpath://*[@id="kw"]

    find_element_by_xpath(” //*[@id="kw"]”)

    find_element_by_xpath(” //input[@id="kw"]”)

    注:xpath中的属性也可以用name、class、进行定位。

    1.1.2.3       父级属性

    如果需定位的元素没有属性值,则可通过起上级或更上级属性找到它。

    find_element_by_xpath(” //span[@class="bg_s_ipt_wr"]/input”)

    1.1.2.4       逻辑运算符

    多个元素的多个属性不唯一,无法通过一个属性定位一个元素,则可通过多个属性定位。

    find_element_by_xpath(” //input[@id=’kw’ and @class=’su’] /span/input”)

    1.1.3      css定位

    详见W3CSschool网站。

    CSS路径复制方法:chrome:F12,copy——copy selector

    如百度搜索框

    <span class="bg s_ipt_wr quickdelete-wrap">

    <span class="soutu-btn"></span>

    <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

    <a href="javascript:;" id="quickdelete" title="清空" class="quickdelete" style="top: 0px; right: 0px; display: none;">

    </a>

    </span>

    1.1.3.1       Class:.

    class:find_element_by_css_selector(“.s_ipt"”)

    .表示通过class属性定位元素。

    1.1.3.2       Id:#

    id:find_element_by_css_selector("#kw")

    #表示通过id属性定位元素。

    1.1.3.3       标签名

    标签名:find_element_by_css_selector("input") (重复性高,定位准确性低)

    1.1.3.3.1     父子关系定位

    find_element_by_css_selector("span>input")

    1.1.3.3.2     属性定位

    find_element_by_css_selector(“[name=’kw’]”)

    find_element_by_css_selector(“[autocomplete=off]”)

    find_element_by_css_selector(‘[type=”submit”]’)

    1.1.3.3.3     组合定位

    find_element_by_css_selector(“form.fm>span>input.s_ipt”)(父子关系&class)

    find_element_by_css_selector(“form.fm>span>input#kw”) (父子关系&id)

    1.1.4      Xpath和CSS定位对比

    目标

    XPath

    CSS 3

    所有元素

    //*

    *

    所有的P元素

    //p

    p

    所有的p元素的子元素

    //p/*

    p > *

    根据ID获取元素

    //*[@id='foo']

    #foo

    根据Class获取元素

    //*[contains(@class,'foo')] 1

    .foo                               

    拥有某个属性的元素

    //*[@title]

    *[title]

    所有P元素的第一个子元素

    //p/*[0]

    p > *:first-child

    所有拥有子元素a的P元素

    //p[a]

    无法实现

    下一个兄弟元素

    //p/following-sibling::*[0]

    p + *



    1.1.5      By定位

    • id:find_element(By.ID,“kw”)
    • name: find_element(By.NAME,“wd”)
    • class:find_element(By.CLASS_NAME,“s_ipt”)
    • tag:find_element(By.TAG_NAME,“input”)(同按钮一样,一般不用)
    • link:find_element(By.LINK_TEXT_text,“新闻”)
    • partial link:find_element(By. PARTIAL_LINK_TEXT,“闻”)(取文本链接中的一部分内容)
    • Xpath:find_element(By.XPATH,“//*[@id=’kw’]”)
    • CSS:find_element(By.CSS,” #kw”)

    注:试用By之前需要将By引入:

    from selenium.webdriver.common.by import By

    1.1     定位一组元素

    如所有复选框、所有checkbox等。

    • id:find_elements_by_id(“kw”)
    • name: find_elements_by_name(“wd”)
    • class:find_elements_by_class_name(“s_ipt”)
    • tag:find_elements_by_tag_name(“input”)(同按钮一样,一般不用)
    • link:find_elements_by_link_text(“新闻”)
    • partial link:find_elements_by_ partial_link_text(“闻”)(取文本链接中的一部分内容)
    • xpath:find_elements_by_xpath(” //input[@id="kw"]”)
    • class:find_elements_by_css_selector(“.s_ipt"”)

    例如:

    # 定位元素组
    # coding=utf-8
    from selenium import webdriver
    from time import *
    
    driver = webdriver.Chrome()
    driver.get("http://news.baidu.com/")
    hrefs = driver.find_elements_by_xpath('//*[@id="header-link-wrapper"]/li[*]/a')
    for i in hrefs:
        if i.get_attribute('text') == '贴吧':
            i.click()
            sleep(2)
            driver.quit()  
    #执行会报: [WinError 10053] 你的主机中的软件中止了一个已建立的连接 暂不知原因

    len()计算元素的个数;

    pop()获取列表中的一个元素,默认最后一个

    pop(0):默认获取一组元素中的第1个

    pop(1):默认获取一组元素中的第2个

    pop(-1):默认获取一组元素中的第一个,同pop()

  • 相关阅读:
    centOS6.8 安装Nginx
    Linux 的su 与sudo 的区别,查看所有用户
    查看电脑 8080端口号被哪个应用占用
    配置文件出错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
    IDEA 代码格式化,快捷键
    学习servlet心得
    nodejs笔记
    Tomcat 7.0.3x 启动慢并且遇到StackOverflowError的异常的解决办法
    国管公积金取房本
    前端准备技术汇总
  • 原文地址:https://www.cnblogs.com/jxba/p/8993517.html
Copyright © 2011-2022 走看看