zoukankan      html  css  js  c++  java
  • python中xpath、css元素定位详解

    一、环境部署

    python+selenium+pycharm+webdriver
    
    1、 python安装包:https://www.python.org/getit/
    
    2、 PyCharm 安装包:http://www.jetbrains.com/pycharm/download/
    
    3、 Selenium安装包:https://pypi.python.org/pypi/selenium
    
         selenium安装方式一: 安装python包,选择全部组件(pip、安装过程中配置环境变量) 然后执行pip install -U selenium 联网安装Selenium;
    
         安装方式二: 安装python包,选择全部组件(pip、安装过程中配置环境变量) 解压selenium-3.13.0.tar.gz,然后用cmd进入解压目录,使用命令 Python setup.py install 安装Selenium。
    
    4、 webdriver配置(以chromedriver为例):
    
    Chromedriver下载地址:http://npm.taobao.org/mirrors/chromedriver/ ***版本与浏览器版本保持一致
    
    配置方式一: 1)把下载好的chromedriver.exe程序放置到python的安装路径下 2)在python中代码编写如下即可:
    driver = webdriver.Chrome() # Firefox、Ie、Edge等
    
    配置方式二: 1)把下载好的chromedriver.exe程序放置到python项目中(其它路径也可) 2)在python中代码编写如下即可:
    chromePath = chromedriver.exe路径 os.environ[‘webdriver.chrome.driver’] = chromePath # gecko ie等
    
    driver = webdriver.Chrome(executable_path=chromePath) # Firefox、Ie等
    
    很长时间不用最好将本地的浏览器升级到最新版本
    

    二、注意事项

    1、把解压的webdriver放置到python根路径   ***在pycharm中创建目录存放webdriver
    
    2、若安装的浏览器是火狐,则需安装在默认路径,否则易报错
    
    3、写代码时,1)需从selenium中导入webdriver   eg:from selenium import webdriver
    
                2)需定义webdriver文件路径   
    
      chrome_driver_path=os.path.join(current,’..chromedriver文件存放的路径')
    
       3)打开chrome浏览器语句   
    
    driver = webdriver.Chrome(executable_path=chrome_driver_path)    
    
    4)输入网址
    
    driver.get(http://www.baidu.com)
    

      

    三、识别元素

    1. 基本元素定位

    driver.find_element_by_id('id_value').send_keys('最新疫情咨讯')    #通过id定位
    driver.find_element_by_name('name_value').send_keys('最新疫情咨讯')    #通过name定位
    driver.find_element_by_class_name('class_name_value').send_keys('最新疫情信息')    #通过class元素定位
    
    driver.find_element_by_tag_name('input').send_key('最新疫情咨讯')    #通过tag_name定位,<缺点:tag_name值不唯一>
    driver.find_element_by_link_text('新闻').click()     #link_text链接中的文本    <缺点:只对<a>标签生效>
    driver.find_element_by_partial_link_text('新').click()     #partial_link_text部分链接中的文本    <缺点:只对<a>标签生效>  

    2.xpath定位元素

    driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/form/span[1]/input')   #绝对路径,单反斜线,遇到同层级多个元素,用下标从1开始,自顶向下写
    driver.find_element_by_xpath('form/span[1]/input')   #相对路径,双反斜线,遇到同层级多个元素,用下标从1开始,自底向上写
    #属性定位   // 标签名[属性名=‘‘属性值’’]
    driver.find_element_by_xpath('//input[@id=''kw'']').send_keys('新梦想')
    
    #多属性定位   and  or
    driver.find_element_by_xpath('//input[@id=''kw''] and @maxlength=''225'']').send_keys('新梦想软测')
    #支持通配符  *
    driver.find_element_by_xpath('//*[@id=''kw'' ]').send_keys('新梦想软测')
    
    #模糊定位,称为部分属性值定位
    #字符串以特定值开头   //a[start-with(@参数1,‘‘参数值2’’)]
    #以什么结尾     ends-with()   #有的会报错,原因,
    #包含    contain()   应用的场景(1、元素信息过长  2、动态属性元素,eg:始终点击第一个订单,即动态获取第一个订单号编码)
    
    #元素文本定位  text()  link_text只能用于a标签,局限性比较大,而xpath所有标签均支持
    driver.find_element_by_xpath('//a[text()=''新闻'']').click()

    3.css定位元素

    《《《《《《《《同层级若遇到id用#号,遇到class用.
    绝对路径

    相对路径
    多属性定位,只支持 and的效果
    模糊定位,称为部分属性值定位

    #查询子元素
    # 子元素  a>b
    driver.find_element_by_css_selector('').send_keys('天天开心')
    
    
    # 后代元素  a b
    driver.find_element_by_css_selector('').send_keys('天天向上')
    
    # 第一个后代元素    :first-child
    driver.find_element_by_css_selector('div#u1  a:first-child').click()
    
    
    # 最后一个后代元素  :last-child
    driver.find_element_by_css_selector('div#u1  a:laat-child').click()
    
    第n个子元素   :nth-child(n)
    
    兄弟元素  同层级的多个元素用+
    
    新的定位语法   需导入by模块  更适合用在框架里面          
    driver.find_element(By.ID,'KW').send_keys('xmx')
    

      

    
    
  • 相关阅读:
    Java面试之对象拷贝
    Java面试之反射
    Java面试之多线程
    Java面试之容器
    Java面试之基础一
    Java面试之Hibernate
    Mysql进阶
    高并发,不怕不怕「限流算法第一把法器:计数器法」
    SpringBoot加载速度慢
    idea VM options参数优化
  • 原文地址:https://www.cnblogs.com/miaoxiaochao/p/12595421.html
Copyright © 2011-2022 走看看