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()

  • 相关阅读:
    【C++】资源管理
    【Shell脚本】逐行处理文本文件
    【算法题】rand5()产生rand7()
    【Shell脚本】字符串处理
    Apple iOS产品硬件参数. 不及格的程序员
    与iPhone的差距! 不及格的程序员
    iPhone游戏 Mr.Karoshi"过劳死"通关. 不及格的程序员
    XCode V4 发布了, 苹果的却是个变态. 不及格的程序员
    何时readonly 字段不是 readonly 的?结果出呼你想象!!! 不及格的程序员
    object file format unrecognized, invalid, or unsuitable Command 不及格的程序员
  • 原文地址:https://www.cnblogs.com/jxba/p/8993517.html
Copyright © 2011-2022 走看看