• Python学习--Selenium模块学习(2)


    Selenium的基本操作

    获取浏览器驱动寻找方式

    1. 通过手动指定浏览器驱动路径
    2. 通过 `$PATH`环境变量找寻浏览器驱动

    可参考Python学习--Selenium模块简单介绍(1)

    控制浏览器访问URL

    browser.get(https://www.baidu.com/) 
     

    find系列函数定位元素

    - `find_element_by_xxx`   返回第一个符合条件 `WebElement`
    - `find_elements_by_xxx`  返回符合条件所有元素包含了`WebEelemnt`列表
    
    - `find`函数系列说明
      - `find_element_by_class_name`    通过class 查询元素
      - `find_element_by_id`            通过 ID
      - `find_element_by_name`          通过name
      - `find_element_by_tag_name`      通过标签名称
      - `find_element_by_css_selector`  css样式选择
      - `find_element_by_link_text`     通过链接内容查找
      - `find_element_by_partial_link_text` 通过链接内容包含的内容查找,模糊查询
      - `find_element_by_xpath`         通过 xpath 查找数据
    

    获取元素属性和文本内容

    # 获取属性
    element.get_attribute('属性名')
    # 获取文本内容
    element.text
    

    输入框输入内容

    input_element.send_keys('博客园')

    自动百度查找博客园

    import time
    
    # 1. 导入模块
    from selenium import webdriver
    
    # 2. 创建浏览器对象,
    browser = webdriver.Chrome()  # 参数驱动路径,默认参数也是当前路径的chromedriver驱动
    
    # 3. 输入网址
    browser.get("https://www.baidu.com/")
    
    timeout = 60
    start_time = time.time()
    while True:
        try:
            time.sleep(0.1)  # 兼顾其他程序使用CPU资源
            # 4. 找到输入框,输入关键词
            input_element = browser.find_element_by_id('kw')
            input_element.send_keys("小a玖拾柒-博客园")  # 查询博客园
            # 5. 找到“百度一下”的按钮,点击一下按钮
            button = browser.find_element_by_id('su')
            button.click()
            time.sleep(3)  # 让网页加载完成
            # 6. 找到作者的博客园链接
            url_element = browser.find_element_by_link_text("小a玖拾柒 - 博客园")
            url_element.click()
            break
        except Exception as e:
            if time.time() > start_time:   # 超时
                print(e)
                break
    
    # 退出浏览器
    time.sleep(3)
    browser.quit()
    

      

    查看百度首页的链接(获取元素是文本内容和元素属性)

    import time
    # 1. 导入模块
    from selenium import webdriver
    
    # 2. 创建浏览器对象,
    browser = webdriver.Chrome()  # 参数驱动路径,默认参数也是当前路径的chromedriver驱动
    
    # 3. 输入网址
    browser.get("https://www.baidu.com/")
    
    baidu_list = browser.find_elements_by_class_name("mnav")
    for item in baidu_list:
        # 获取元素是文本内容和元素属性
        print("{0}:{1}".format(item.text, item.get_attribute("href")))
    
    # 退出浏览器
    time.sleep(5)
    browser.quit()

    image

    扩展:Selenium的自动等待方式

    当控制浏览器时,浏览器正在加载页面同时又去获取数据导致浏览器寻找不到需要操作的元素引发异常。
    - 方式一:强制等待,浪费时间

    import time
    time.sleep(秒数)
    

    - 方式二:隐性等待,缺点:无法控制 AJAX请求

    browser.implicitly_wait(等待时间)
    

    - 方式三:显性等待,每个元素都可以自己定义检查条件

    手动编写:

    timeout = 60
    start_time = time.time()
    while True:
        try:
            time.sleep(0.1)  # 兼顾其他程序使用CPU资源
            # 4. 找到输入框,输入关键词
            input_element = browser.find_element_by_id('kw')
            input_element.send_keys("小a玖拾柒-博客园")  # 查询博客园
            # 5. 找到“百度一下”的按钮,点击一下按钮
            button = browser.find_element_by_id('su')
            button.click()
            time.sleep(3)  # 让网页加载完成
            # 6. 找到作者的博客园链接
            url_element = browser.find_element_by_link_text("小a玖拾柒 - 博客园")
            url_element.click()
            break
        except Exception as e:
            if time.time() > start_time:   # 超时
                print(e)
                break

    Selenium提供:

    # 导入显性等待的API需要的模块
        # 1> 等待对象模块
        from selenium.webdriver.support.wait import WebDriverWait
        # 2> 导入等待条件模块
        from selenium.webdriver.support import expected_conditions as EC
        # 3> 导入查询元素模块
        from selenium.webdriver.common.by import By
    
        # 使用selenium api 实现显性等待
        # 1> 创建等待对象
        # 参数一 浏览器对象
        # 参数二 超时时间
        # 参数三 检查元素时间间隔
        wait = WebDriverWait(browser,60,0.1)
        # presence_of_element_located 检查元素是否存在,参数是一个元祖,元祖内部描述等待元素查询方案
        # visibility_of_element_located 检查元素是否可见
        url_element= wait.until(EC.presence_of_element_located((By.CLASS_NAME,"favurl")))
        url_element.click()
  • 相关阅读:
    Linux网络编程系列-TCP传输控制
    Lucene系列-索引文件
    python Web开发框架-Django (1)
    安卓课本例子-01-使用XML布局文件控制用户界面
    javaEE--数据库01
    安卓-08-布局管理器
    安卓-07-开发自定义的View--实践-跟随手指移动的小兔子
    安卓-06-使用XML和Java设置UI--实例--03--QQ相册
    安卓-05-使用Java设置UI--实验02-使用Java实现UI设置
    安卓-04-实例01-XML布局UI界面
  • 原文地址:https://www.cnblogs.com/ftl1012/p/10327685.html
Copyright © 2020-2023  润新知