Selenium with Python学习笔记整理(网课+网站持续更新)

本篇是根据学习网站和网课结合自己做的学习笔记,后续会一边学习一边补齐和整理笔记

WEB UI自动化环境配置

(推荐靠谱的博客文章来进行环境配置,具体的我就不写了)

下载和安装 Python+下载和安装 PyCharm+安装 Selenium 库+下载浏览器驱动程序:

具体操作还得是看这两篇文章:

Selenium web UI自动化测试简介与环境搭建_selenium webui-CSDN博客

PyCharm 搭建 Selenium + Python 的自动化测试环境_pycharm自动化测试-CSDN博客

然后安装selenium的时候出现了安装不成功的问题,那就参考这篇文章:

安装selenium(超级详细)_selenium安装-CSDN博客

Chorme Driver安装链接在这,非常全了:

Chrome for Testing availability (googlechromelabs.github.io)

Anaconda安装教程参考这篇很实用:

Anaconda安装教程傻瓜教程_anaconda下没有usr目录-CSDN博客

遇到的问题及解决方法:

下载的谷歌浏览器驱动版本和selenium版本一致,但新版本selenium浏览器总是会退,解决方法:

在最后加个input()等待

选择元素的基本方法

find_element 和 find_elements 的区别

使用 find_elements 选择的是符合条件的 所有 元素, 如果没有符合条件的元素, 返回空列表

使用 find_element 选择的是符合条件的 第一个 元素, 如果没有符合条件的元素, 抛出 NoSuchElementException 异常

通过WebElement对象选择元素

WebDriver 对象 选择元素的范围是 整个 web页面

WebElement 对象 选择元素的范围是 该元素的内部

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

# 创建 WebDriver 对象
wd = webdriver.Chrome()
"""
后续所有的 find_element 或者 find_elements 之类的方法调用 都会采用上面的策略:
如果找不到元素, 每隔 半秒钟 再去界面上查看一次, 直到找到该元素, 或者 过了10秒 最大时长
"""
# 隐式等待  以后创建 WebDriver 对象之后,都要条件反射的加上这个隐式等待
wd.implicitly_wait(10)

try:
    # 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
    wd.get('https://www.byhy.net/cdn2/files/selenium/stock1.html')

    # 根据id选择元素,返回的就是该元素对应的WebElement对象
    element = wd.find_element(By.ID, 'kw')

    # 通过该 WebElement对象,就可以对页面元素进行操作了
    # 比如输入字符串到 这个 输入框里
    element.send_keys('通讯\n')

    time.sleep(1)
    #这里要先把之前的通讯清掉,不然就是“通讯科技了”,这样搜不到的
    element.clear()

    element = wd.find_element(By.ID,'kw')
    element.send_keys('科技\n')

    # 等待用户输入,以便观察当前页面状态
    input("按下任意键继续...")

    element = wd.find_element(By.ID,'go')
    element.click()

    #让这个代码执行不要那么块 网站响应的速度相对较慢
    # import time
    #问题是这里设置多长时间合适呢
    """
    解决方法:当发现元素没有找到的时候,并不立即返回 找不到的 元素的错误
    而是周期(每隔半秒)重新寻找元素 直到元素找到
    或者超出指定最大等待时长,这时才 抛出异常(如果是 find_elements 之类的方法, 则是返回空列表)。
    """
    # while True:
    #     try:
    #         # 网站还没有来得及 返回搜索结果,我们就执行了如下代码
    #         element = wd.find_element(By.ID, '1')
    #         print(element.text)
    #         break
    #     except:
    #         time.sleep(1)
    """
    但这样会出现死循环,这里要用implicitly_wait ,隐式等待 ,或者 全局等待 。
    该方法接受一个参数,用来指定 最大等待 时长
    """
    element = wd.find_element(By.ID, '1')
    print(element.text)

    # 要获取整个元素对应的HTML文本内容,可以使用
    print(element.get_attribute('outerHTML'))
    # 如果,只是想获取某个元素内部的HTML文本内容,可以使用

finally:
    # 关闭浏览器
    wd.quit()

操控元素的基本方法

操控元素通常包括

  • 点击元素

  • 在元素中输入字符串,通常是对输入框这样的元素

  • 获取元素包含的信息,比如文本内容,元素的属性

点击元素:就是调用元素WebElement对象的 click方法

输入字符串就是调用元素WebElement对象的send_keys方法

获取元素:

通过WebElement对象的 text 属性,可以获取元素 展示在界面上的 文本内容

2 通过WebElement对象的 get_attribute 方法来获取元素的属性值

3 要获取整个元素对应的HTML文本内容,可以使用 element.get_attribute('outerHTML')

4 如果,只是想获取某个元素 内部 的HTML文本内容,可以使用 element.get_attribute('innerHTML')

5 对于input输入框的元素,要获取里面的输入文本,用text属性是不行的,这时可以使用 element.get_attribute('value')


from selenium import webdriver
from selenium.webdriver.common.by import By

# 创建 WebDriver 实例对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome()

try:
    # WebDriver 实例对象的get方法可以让浏览器打开指定网址
    wd.get('https://www.byhy.net/cdn2/files/selenium/sample1.html')

    # 等待页面加载完成
    #这里很重要   不然总是闪退
    input("等待页面加载,按任意键继续...")

    # 根据 class name 选择元素,返回的是一个列表
    # 里面都是class属性值为animal的元素对应的WebElement对象
    element = wd.find_element(By.ID, 'container')

    # 限制 选择元素的范围是 id 为 container 元素的内部。
    spans = element.find_elements(By.TAG_NAME, 'span')
    for span in spans:
        print(span.text)

finally:
    # 关闭浏览器
    wd.quit()

定位元素

eg:拿测试百度网页来看:

 通过ID定位

在网页上通过 ID 定位一个元素(通常是一个输入框),然后向这个输入框中输入 "Selenium",最后打印出这个输入框的当前值。

# 1. By ID - 定位搜索输入框
    search_box_by_id = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "kw"))
    )
    search_box_by_id.send_keys("Selenium")  # 在输入框中输入"Selenium"
    print("Located by ID:", search_box_by_id.get_attribute("value"))
  1. WebDriverWait(driver, 10):

    • 这个部分表示对 driver(Selenium 的浏览器控制对象)进行最多 10秒 的等待时间。Selenium 中有隐式和显式等待,此处使用的是显式等待即在指定时间内等待某个条件满足。
  2. until(EC.presence_of_element_located((By.ID, "kw"))):

    • until 方法的作用是在指定的条件被满足前一直等待,或者直到超时。这里的条件是EC.presence_of_element_located,它会等待页面上某个元素(通过指定的定位方法,如ID)被找到并存在。
    • (By.ID, "kw") 表示通过 ID 属性定位页面上的元素,ID 的值是 "kw"。这个ID通常用于唯一标识页面中的某个元素。
  3. search_box_by_id.send_keys("Selenium"):

    • send_keys 方法用于在找到的输入框中模拟键盘输入。这里它向页面上的搜索框输入了 "Selenium" 这个字符串。
  4. print("Located by ID:", search_box_by_id.get_attribute("value")):

    • get_attribute("value") 是获取输入框当前的值。它会打印出输入框中已经填入的内容,以确认 "Selenium" 已经正确输入。

 按名称定位 

通过 Name 或 ID 属性定位页面上的搜索按钮(最终是通过 ID "su" 定位),并模拟点击操作。

   # 2. By Name - 定位搜索按钮
    # 定位搜索按钮(名称为wd),并点击按钮(百度按钮的ID实际为su,所以切换成用ID定位)。
    search_button_by_name = driver.find_element(By.NAME, "wd")
    search_button_by_name = driver.find_element(By.ID, "su")  # 百度搜索按钮的ID为 "su"
    search_button_by_name.click()
    print("Located by Name: 搜索按钮点击成功")
  1. search_button_by_name = driver.find_element(By.NAME, "wd"):

    • 尝试通过按钮的 Name 属性来定位搜索按钮。find
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值