• Selenium官方给了八种定位方法


    1.find_element_by_class_name通过class name定位元素

    我们拿Pythonfree网站来举例,点击右上角的搜索框。

    鼠标右击搜索图标,然后选择检查

    可以看到搜索标签的class name是btn btn-default

    Snipaste_2019-12-12_20-08-35.png

    所以find_element_by_class_name方法里的参数就填btn :

    #coding=utf-8
    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome(executable_path="D:/chromedriver/chromedriver.exe")
    driver.get('https://www.pythonf.cn')
    time.sleep(5)
    
    driver.find_element_by_class_name('btn').click()
    

    2.find_element_by_id通过id定位元素

    接着上面的例子,我们要在输入框中输入Pycharm几个字,继续鼠标右击输入框,选择检查,看到input标签的id是key

    Snipaste_2019-12-12_20-11-11.png

    所以find_element_by_id方法里填入key:

    #coding=utf-8
    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome(executable_path="D:/chromedriver/chromedriver.exe")
    driver.get('https://www.pythonf.cn')
    time.sleep(5)
    
    search = driver.find_element_by_id("key")
    search.send_keys(u'Pycharm')
    

    3.find_element_by_tag_name通过html tag定位

    上面在搜索框里输入字符我们也可以通过定位html tag来实现,输入框的tag是input,所以代码如下:

    #coding=utf-8
    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome(executable_path="D:/chromedriver/chromedriver.exe")
    driver.get('https://www.pythonf.cn')
    time.sleep(5)
    
    search = driver.find_element_by_tag_name("input")
    search.send_keys(u'Pycharm')
    

    一般不直接通过tag name定位,因为一个页面相同的html tag有很多,有可能会定位错误,我举得这个例子,刚好页面只有一个input输入框。

    4.find_element_by_name通过name定位

    还是拿上面输入框举例,使用上面的方法,右键元素-选检查,可以看到input框的name是’key’。

    Snipaste_2019-12-12_20-15-43.png

    所以代码是 find_element_by_name(‘key’)。

    5.find_element_by_css_selector通过css来定位

    有时用上述方法定位元素很繁琐时,往往通过css来定位会很方便,我也常常使用css来定位。还是拿PythonFree的搜索框来举例。我们右击搜索框选择检查,打开chrome的开发者工具,如图:

    右边标红处就是input框的css,’input’,完整代码如下:

    #coding=utf-8
    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome(executable_path="D:/chromedriver/chromedriver.exe")
    driver.get('https://www.pythonf.cn')
    time.sleep(5)
    
    
    search = driver.find_element_by_css_selector("input")
    search.send_keys(u'Pycharm')
    

    6.find_element_by_xpath通过xpath来定位

    这种方法也是很适用,用上述方法难定位的就可以试试

    复制出来的搜索按钮Xpath是://*[@id="bs-example-navbar-collapse-1"]/form/button

    7.find_elements_by_link_text通过文字链接来定位

    这种方法是用来定位文字链接的,就是’‘标签括起来的文字。
    比如我们要定位搜索按钮。

    find_element_by_link_text(u’搜索’)

    第8种方法就是在第七种方法基础上可以模糊匹配字符。find_elements_by_partial_link_text

    在使用上面的方法定位元素时,都要能唯一定位才行,比如一个页面有几个相同的id,相同的class name等时,这时就可能定位到错误的元素上去,这时就要使用上述方法的复数来定位。

    1. find_elements_by_name
    2. find_elements_by_xpath
    3. find_elements_by_link_text
    4. find_elements_by_partial_link_text
    5. find_elements_by_tag_name
    6. find_elements_by_class_name
    7. find_elements_by_css_selector

    element后面多了一个s,会以列表的形式把定位到的相同元素全部返回,你要知道你需要的元素是第几个,通过数组下标来取对应的元素。

    比如你要点击某个网站第三个链接,写法如下:
    find_elements_by_tag_name(‘a’)[2].click()

    Selenium定位元素的方法就写完了,还有一点说的就是,Selenium涉及到要操作字符串的地方,比如向输入框输入时,最好用unicode码。

     转自:https://www.pythonf.cn/read/38

  • 相关阅读:
    CentOS7 安装 Mysql5.6.40
    CentOS7 安装 Python3.6.5
    CentOS7 添加新用户并授权 root 权限
    02 常用数据结构
    01 常见算法
    初识 Docker
    glob & fnmatch -- 使用Unix style通配符
    Pillow6 起步
    leetcode70. 爬楼梯 🌟
    leetcode69. x 的平方根 🌟
  • 原文地址:https://www.cnblogs.com/javalinux/p/14807189.html
Copyright © 2020-2023  润新知