美文网首页selenium知识点整理&汇总
Selenium学习002-元素选择之常规方法

Selenium学习002-元素选择之常规方法

作者: 残阳夕露 | 来源:发表于2018-07-27 00:00 被阅读100次

    Selenium学习笔记目录

    Selenium 选择、操作web元素01

    Selenium 自动化主要就是:

    • 选择界面元素依靠selenium库 难点
    • 操作界面元素依靠selenium库
      • 输入操作:点击、输入文字、拖拽等
      • 输出操作:获取元素的各种属性
    • 根据界面上获取的数据进行分析和处理依靠编程语言,例如Python等 难点

    选择元素

    • WebDriver:操作整个浏览器和当前整个页面
      • 当前页面上的选择符合查找条件的对象
      • 打开网址,回退,前进,刷新网页
      • 获取、改变浏览器窗口大小,关闭浏览器,截屏
      • 获取、设置cookies
    • WebElement:操作和对应web元素
      • 当前web元素的所有子元素里面符合查找条件的对象
      • 操作该web元素,比如
        • 点击元素
        • 输入字符
        • 获取元素坐标、尺寸、文本内容、其他的属性信息
    通过id选择元素
    • id是DOM中唯一标志这个元素的属性
      • 查找效率高
      • 写法一:element = driver.find_element_by_id("kw")
      • 写法二:
      from selenium.webdriver.common.by import By
      element = driver.find_element(by=By.ID,value="kw")
      
    • 没有找到id时将报错selenium.common.exceptions.NoSuchElementException
    • 没有id时,可以通过根据上层的id,然后获取内部的源代码,然后找到相关信息(str)

      当开发做一定的变动时,此方法就失效了

    • 没有id时,使用BeautifulSoup4详见后续内容
    获取元素信息
    • text属性显示该元素在web页面显示出来的文本内容
    • get_attribute方法非界面值
      • 某个属性的值ele.get_attribute('href')
      • 该元素对应的html源代码ele.get_attribute('outerHTML')

      出现问题时,将相关源代码打印到日志里,以便快速定位问题
      - 该元素的内部部分的html源代码ele.get_attribute('innerHTML')

    Selenium 选择、操作web元素02

    选择元素的方法

    通过name选择元素 id是唯一的,name不一定是唯一的

    <input name='cheese' type='text'/>

    • 返回第一个找到的元素如果找不到,抛出异常
    # 方法一:
    cheese = driver.find_element_by_name('cheese')
    # 方法二:
    from selenium.webdriver.common.by import By
    cheeses = driver.find_emement(By.NAME,'cheese')
    
    # 示例
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get(r'file:///E:/Python/tmp/own/test.html')
    button = driver.find_element_by_name('button')
    print(button.text)
    # 执行结果
    按钮01
    
    #找不到时
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get(r'file:///E:/Python/tmp/own/test.html')
    try:
        button = driver.find_element_by_name('button4')
        print(button.text)
    except:
        print('未找到')
    # 执行结果
    未找到
    
    • 返回所有的元素(list)如果找不到,返回空列表,不抛出异常
    # 方法一:
    cheese = driver.find_elements_by_name('cheese')
    # 方法二:
    from selenium.webdriver.common.by import By
    cheeses = driver.find_emements(By.NAME,'cheese')
    
    # 示例
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get(r'file:///E:/Python/tmp/own/test.html')
    button = driver.find_elements_by_name('button')
    for a in button:
        print(a.text)
    # 执行结果
    按钮01
    按钮02
    按钮03
    

    通过class选择元素非唯一值,通常用来选择多个元素

    • 返回所有的元素(list)
    cheeses = driver.find_elements_by_class_name('cheese')
    

    通过tag名选择元素

    • 如果tag名是唯一的,可以根据tag名定位
    • 如果tag名不是唯一的,返回到是第一个
    frame = driver.find_element_by_tag_name('iframe')
    

    通过链接文本选择元素

    • 对于链接,可以通过其链接文本的内容<a href="http://www.baidu.com">转到百度</a>
    ele = driver.find.element_by_link_text("转到百度")
    
    • 只通过部分文本去找到该链接元素适用于文本内容过长时
    ele = driver.find.element_by_partial_link_text(u"百度") # 此处可以不写u,python2中此处的“u”必写
    

    页面操作(补充)

    学习地址

    查找时间

    • 每半秒查找一次,直到10秒后 driver.implicitly_wait((10))
    • 强制睡眠10秒
    import time
    time.sleep(10)
    

    模拟回车键enter的操作

    • 使用\n方法
    from selenium.webdriver.common.keys import Keys
    driver.find_element_by_id('toStationText').send_keys('杭州东\n')
    
    
    • 使用enter方法
    from selenium.webdriver.common.keys import Keys
    driver.find_element_by_id('toStationText').send_keys('杭州东')
    driver.find_element_by_id('toStationText').send_keys(Keys.ENTER)  # 模拟键盘enter
    
    

    页面交互

    WebDriver提供了各种方法来寻找元素。例如下面有一个表单输入框。

    <input type="text" name="passwd" id="passwd-id" />

    element = driver.find_element_by_id("passwd-id")
    element = driver.find_element_by_name("passwd")
    element = driver.find_elements_by_tag_name("input")
    element = driver.find_element_by_xpath("//input[@id='passwd-id']")
    

    获取了元素之后,下一步当然就是向文本输入内容了,可以利用下面的方法

    element.send_keys("some text")
    

    同样你还可以利用 Keys 这个类来模拟点击某个按键

    element.send_keys("and some", Keys.ARROW_DOWN)
    

    可以用下面的方法来清除输入文本的内容。

    element.clear()
    

    填充表单

    相关文章

      网友评论

        本文标题:Selenium学习002-元素选择之常规方法

        本文链接:https://www.haomeiwen.com/subject/jlnimftx.html