• Selenium 元素定位 面试必问!!!


    目录

    selenium 八种基本元素定位方法,面试必问!!!:

    常用定位:

    By定位:

    不常用定位:

    元素定位示例:

    elements相似元素定位

    selenium 定位补充:

    JS的5种定位方式:

    jQuery定位:


    selenium 八种基本元素定位方法,面试必问!!!:

    id唯一的
    name元素的名称
    class name元素的类名
    tag name标签,不推荐,重复率太高
    link text超文本链接
    partial link text对超文本链接的一种补充
    xpath相对/绝对路径
    css selectorcss定位

    常用定位:

    idfind_element_by_id(" ")
    namefind_element_by_name(" ")
    class namefind_element_by_class_name(" ")
    tag namefind_element_by_tag_name(" ")
    link textfind_element_by_link_text(" ")
    partial link textfind_element_by_partial_link_text(" ")
    xpathfind_element_by_xpath(" ")
    css selectorfind_element_by_css_selector(" ")

    By定位:

    使用By定位的前提是需要导入By类:

    from selenium.webdriver.common.by import By
    idfind_element(By.ID, " ")
    namefind_element(By.NAME, " ")
    class namefind_element(By.CLASS_NAME, " ")
    tag namefind_element(By.TAG_NAME, " ")
    link textfind_element(By.LINK_TEXT, " ")
    partial link textfind_element(By.PARTIAL_LINK_TEXT, " ")
    xpathfind_element(By.XPATH, " ")
    css selectorfind_element(By.CSS_SELECTOR, " ")

    不常用定位:

    这种方式很少人用,明明写起来很简单粗暴啊~

    idfind_element(“id”, " ")
    namefind_element(“name”, " ")
    class namefind_element(“class”, " ")
    tag namefind_element(“tag name”, " ")
    link textfind_element(“link text”, " ")
    partial link textfind_element(“partial link text”, " ")
    xpathfind_element(“xpath”, " ")
    css selectorfind_element(“css selector”, " ")

    元素定位示例:

    (谷歌为例)定位百度输入框元素 :

    在这里插入图片描述

    使用不同的方法进行定位并输入内容:

    1. #coding=utf-8
    2. from selenium import webdriver
    3. import time
    4. from selenium.webdriver.common.by import By
    5. driver = webdriver.Chrome()
    6. driver.implicitly_wait(10)
    7. driver.get("http://www.baidu.com")
    8. # 使用id定位输入内容
    9. driver.find_element_by_id("kw").send_keys("Selenium")
    10. # 使用By的class定位输入内容
    11. # driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("Selenium")
    12. # 使用css的class定位输入内容,class是用.标记,id是用#标记,标签名直接写具体标签名就好
    13. # driver.find_element_by_css_selector(".s_ipt").send_keys("Selenium")
    14. # 使用xpath定位输入内容
    15. # driver.find_element_by_xpath("//*[@id="kw"]").send_keys("Selenium")
    16. # 使用id定位点击"百度一下"按钮
    17. # deiver.find_element("id", "su").click()
    18. time.sleep(2)
    19. driver.quit()

    elements相似元素定位

    elements复数定位方式每次取到的都是具有相同类型属性的一组元素,所以返回的是一个list队列,我们也可以利用list的下标去定位单个的元素
    在上面的例举的八中基本定位方式种,都有对应的复数形式,只是在element后面加了字母s,如id复数定位:

    driver.find_elements_by_id()[下标]

    比如百度首页种,右上角有新闻、视频、地图、贴吧等一些链接,我们通过f12查看源码可以发现,这些链接都有共同的class, class=“mnav”。

    在这里插入图片描述

    举个例子,比如定位排在第六个的学术,可以这样定位:driver.find_elements_by_class_name(“mnav”)[5].click()

    还可以通过css的复数定位写法:driver.find_elements(“css selector”,".mnav")[6].click()

    当然,也可以借助pop()函数,一般pop()或pop(-1)表示获取元素种的最后一个,pop(2)表示第三个:
    driver.find_elements(“css selector”,".mnav").pop().click()


    selenium 定位补充:

    其实看到这里,上面的定位方式应该就基本够用了,但是有的时候就是会出现隐藏得元素或一些诡异的定位失效的问题,这个时候如果用js进行直接执行该事件,往往就可以解决~

    JS的5种定位方式:

    iddocument.getElementById()
    namedocument.getElementsByName()
    tagdocument.getElementsByTagName()
    classdocument.getElementsByClassName()
    cssdocument.querySelectorAll()

    其中只有id对象用的是Element返回是单个对象,其他都是Elements返回的是一个list这点千万要注意,具体用法和上面的webdriver基础定位一样。先写好对应的js语句,可以先赋值给一个变量,然后后调用execute_script进行执行一下js就好了,下面还是结合那个百度搜索的栗子,可以对应学习实验一下:

    1. search_js = "document.getElementsByName('wd')[0].value='selenium';"
    2. search_js2 = "document.querySelectorAll('.s_ipt')[0].value='selenium';"
    3. button_js = "document.getElementById('su').click();"
    4. button_js2 = "document.getElementsByClassName('s_btn')[0].click()"
    5. driver.execute_script(search_js2)
    6. driver.execute_script(button_js2)

    以上分别结合常用的四种js定位方式写了四条js语句,然后要执行的就execute_script一下就好啦~

    jQuery定位:

    据说会jQuery定位的在定位的路上就是披襟斩棘,所向披靡如此超神的定位,还是可以了解一下的

    jQuery语法是为HTML元素的选取编制的,可以对元素执行一些具体的操作

    基础语法是$(selector).action()

    $符号定义jQuery,selector选择器用来查询具体的HTML元素,通过action()来执行对元素的具体操作。

    其中我们经常用到的action()在jq中有这么几种:

    $(selector).val(‘input_value’) 其中input_value表示要输入的文本的值

    $(selector).val(’’) 如果为空,则执行后是清空的意思

    $(selector).click() 行为也是肯定有的

    让我们结合百度的栗子看一下,用jQuery的写法和js有一点点的类似,但明显简洁多了:

    1. search_jq = "$('#kw').val('selenium')"
    2. button_jq = "$('.s_btn').click()"
    3. driver.execute_script(search_jq)
    4. driver.execute_script(button_jq)
  • 相关阅读:
    BWO白鲸优化算法
    二十三种设计模式全面解析-享元模式(Flyweight Pattern)详解:构建高效共享的对象结构
    【服务器】无法进行ssh连接的问题逐一排查以及解决方法
    Redis的介绍安装以及启动与使用、数据类型、Redis管道、Django使用Redis
    甲方与三方渗透团队的协作注意点
    【Java面试】面试遇到宽泛的问题,这么回答就稳了,谈谈你对Redis的理解
    Linux sftp服务搭建,新增账户
    图解LeetCode——1235. 规划兼职工作(难度:困难)
    读书记录 《你想活出怎样的人生》
    利用Python进行数据分析-Numpy入门基础知识
  • 原文地址:https://blog.csdn.net/weixin_44988085/article/details/104937440