zoukankan      html  css  js  c++  java
  • Selenium—web元素的操作

    web元素的基本操作

    获取元素

    • 获取元素,赋值变量

      • inputbox = driver.find_element_by_id("kw")
    • 获取元素文本信息

      • driver.find_element_by_css_selector('[href="http://news.baidu.com"]').text
    • 获取元素属性值 

      • driver.find_element_by_css_selector('[href="http://news.baidu.com"]').get_attribute("class"))
    • 获取多个元素

    操作元素

    • 点击

      • 单击:.click()
      • 双击:.double_click()
      • 右键:.context_click()
    • 编辑框输入信息

      • .send_keys()
    • 清除文本

      • .clear()

    等待元素

    • 强制等待
      • time.sleep()
      • 单位:s
      • 强制代码停止运行,在selenium中不够智能;如果设置的时间短,元素还没加载出来,会导致报错;如果设置时间过长,会影响代码的执行效率
    • 显式等待
      • WebDriverWait().until()
      • 单位:s
      • 在设置的时间内,每0.5s查看该元素是否可见,如果可见,则终止等待;如果不可见则继续等待,直至超时报错
    • 隐式等待
      • implicitly_wait()
      • 单位:s
      • 在设置后所有的元素定位都会等待给定的时间,直到元素出现为止,在设置的时间内元素没出现就会报错
      • 隐式等待是一个全局设置,如果后面的需要更改等待时间,则还需要重新设置

     实例:

    1. 使用selenium,打开chrome,输入网址:https://baidu.com
    2. 查看新闻的文本信息
    3. 输入框内输入selenium python,点击搜索按钮,打印出所有的搜索信息
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    import time
    
    driver = webdriver.Chrome()
    
    driver.get("https://www.baidu.com")
    
    # 隐式等待
    # 该方法为全局设置,设置后,以下所有的find方法都会预等10s,直至元素出现
    driver.implicitly_wait(10)
    
    # 定位百度输入框元素
    inputbox = driver.find_element_by_id("kw")
    
    # 定位右上角的 新闻 元素
    news = driver.find_element_by_css_selector('[href="http://news.baidu.com"]')
    
    # 显式等待,并将该元素赋值给 button
    button = WebDriverWait(driver, 10).until(
                          EC.presence_of_element_located((By.ID, "su"))
                          )
    # WebDriverWait中参数解析:
        # WebDriverWait(driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None)
        # driver:驱动浏览器---【driver = webdriver.Chrome()】
        # timeout:设置的最长等待时间
        # poll_frequency:检测的时间间隔,即每0.5s查询一次元素,默认为0.5s,可缺省
        # ignored_exceptions:超时后的报错信息,默认为NoSuchElementException
    
    # 获取 news 的文本信息
    print("新闻链接的文本信息为:",news.text)
    
    # 使用get_attribute方法获取新闻链接的class属性值
    print("新闻链接的class属性值为:",news.get_attribute("class"))
    
    print('
    ******************分割******************
    ')
    
    # 百度输入框内输入 selenium
    inputbox.send_keys("selenium")
    
    # 强制等待1s
    time.sleep(1)
    
    # 清除输入框内容
    inputbox.clear()
    
    # 百度输入框内输入 selenium python
    inputbox.send_keys("selenium python")
    
    # 点击百度一下按钮
    button.click()
    
    # 获取查询结果中,所有的 //div//h3/a 元素信息
    # 百度搜索中,很多查询结果带有广告信息,虽然界面可以插件来屏蔽,但是元素信息仍然存在!
    # 通过非广告信息与广告信息的元素对比,得知,广告元素中存在 data-landurl 属性,该属性值为链接形式
    # 通过 not(contains(@data-landurl,'http')) 筛选出,不包含 data-landurl 属性值存在 http 的元素
    texts = driver.find_elements_by_xpath("//div//h3/a[not(contains(@data-landurl,'http'))]")
    
    # 使用for循环,列出每个元素的text属性
    for one in texts:
        print(one.text)
    
    driver.quit()

    输出结果如下:

    新闻链接的文本信息为: 新闻
    新闻链接的class属性值为: mnav
    
    ******************分割******************
    
    python爬虫从入门到放弃(八)之 Selenium库的使用 - python修行路 ...
    Selenium+Python学习之一 - 避雨亭 - 博客园
    Selenium(Python web测试工具)基本用法详解_python_脚本之家
    python bindings for selenium webdriver - selenium · PyPI
    Selenium with Python — Selenium Python Bindings 2 ...
    Selenium自动化测试入门(基于Python) - baby_hua的专栏 - CSDN博客
    Selenium with Python — Selenium Python Bindings 2 ...
    Python 爬虫基础Selenium库的使用(二十二01) - 凯耐的博客 - CSDN...
    2. 快速入门 — Selenium-Python中文文档 2 documentation
    selenium+python自动化测试系列(一):登录_慕课手记
  • 相关阅读:
    图片上传功能(html+js)
    Dom元素基本操作方法API(转载)非原创
    使用jquery mobile笔记(更新中)
    基于ASP.NET AJAX的WebPart开发与部署
    Workbooks 对象的 Open 方法参数说明
    使用properties和SPContext时须小心
    转载 C# 与 C++ 数据类型对照
    ASP.NET实现进度条
    为sharepoint的内部页面添加后台代码
    操作Word Application.Documents.Open方法参数说明
  • 原文地址:https://www.cnblogs.com/wilson-5133/p/10922262.html
Copyright © 2011-2022 走看看