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

      

    
    
  • 相关阅读:
    openldap
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P1567 统计天数
    Java实现 洛谷 P1567 统计天数
  • 原文地址:https://www.cnblogs.com/miaoxiaochao/p/12595421.html
Copyright © 2011-2022 走看看