python Selenium学习笔记

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
from selenium import webdriver
import time
import urllib.parse
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import Select

from selenium.webdriver.common.by import By
# WebDriverWait 库,负责循环等待
from selenium.webdriver.support.ui import WebDriverWait
# expected_conditions 类,负责条件出发
from selenium.webdriver.support import expected_conditions as EC

try:
    # selenium 开始不再支持 phantomJSdriver 可以改用 chromedriver geckodriver
    # driver = webdriver.PhantomJS(r"D:\Program Files (x86)\phantomjs-2.1.1-windows\bin\phantomjs.exe")
    driver = webdriver.Chrome()
    # driver = webdriver.Firefox()
    # driver.get("https://www.baidu.com/")

    # 获取Cookie的值
    # print(driver.get_cookies()) #获取所有cookie
    # [{'domain': '.baidu.com', 'expiry': 3721097795.504459, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1573614131'}, {'domain': '.baidu.com', 'expiry': 3721097795.504422, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': '9B538A4E3A7D4B22CF1185EF64425B3F'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '1429_21122_18560_29568_29699_29220_26350'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'delPer', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.baidu.com', 'expiry': 1605150148.504504, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '9B538A4E3A7D4B2289973E0090B4E8A2:FG=1'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.baidu.com', 'expiry': 1573700548.782194, 'httpOnly': False, 'name': 'BDORZ', 'path': '/', 'secure': False, 'value': 'B490B5EBF6F3CD402E515D22BCDA1598'}, {'domain': 'www.baidu.com', 'expiry': 1574478148, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}]
    # print(driver.get_cookie("PSTM")) #获取name为某值的cookie
    # {'domain': '.baidu.com', 'expiry': 3721097795.504459, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1573614131'}

    # 设置值
    # driver.find_element_by_id("kw").send_keys("王者荣耀")

    # 模拟全选
    # driver.find_element_by_id("kw").send_keys(Keys.CONTROL , "a")

    # 模拟剪切
    # driver.find_element_by_id("kw").send_keys(Keys.CONTROL , 'x')

    # 重新输入
    # driver.find_element_by_id("kw").send_keys("豆瓣电影")

    # 模拟 enter键盘事件
    # driver.find_element_by_id("su").send_keys(Keys.ENTER)

    # 鼠标点击
    # Message: no such element: Unable to locate element
    # driver.find_element_by_xpath("//form[@id='form']/span[@id='s_btn_wr']/input[@id='su']").click()
    # driver.find_element_by_id("su").click()

    # 等待两秒
    # time.sleep(2)

    # 截屏
    # driver.save_screenshot("baidu.png")

    # 获取属性title、page_source、current_url
    # print(driver.title) #王者荣耀_百度搜索
    # print(driver.page_source)  #打印网页渲染后的源代码
    # print(driver.current_url)
    # print(urllib.parse.unquote(driver.current_url , 'utf-8'))

    ''' 定位UI元素 (WebElements) 
        下的API 单个元素选取
        find_element_by_id
        find_elements_by_name
        find_elements_by_xpath
        find_elements_by_link_text
        find_elements_by_partial_link_text
        find_elements_by_tag_name
        find_elements_by_class_name
        find_elements_by_css_selector
    '''
    # driver.find_element_by_name("wd").send_keys("西游记")
    # driver.find_element_by_xpath("//input[@id='kw']").send_keys("东游记")
    # driver.find_element_by_class_name("s_ipt").send_keys("周杰伦")
    # driver.find_element_by_link_text("hao123").click()           #根据超链接文本查找
    # driver.find_element_by_partial_link_text("123").click()      #根据超链接文本的部分文字内容查找
    # driver.find_element_by_css_selector("#kw").send_keys("doinb")  #根据css选择器查找
    # time.sleep(1)
    # driver.save_screenshot("baidu.png")

    '''
      鼠标动作链
         (单击 click 、双击 double_click 、右击 context_click 、左键hold住 click_and_hold、拖拽 drag_and_drop等)
         move_by_offset
    '''
    # driver.get("https://etax.shanxi.chinatax.gov.cn/login")
    # driver.maximize_window()         # 最大化窗口
    # closeLayer = driver.find_element_by_id("closeLayer")
    # ActionChains(driver).move_to_element(closeLayer).click().perform() #关闭弹窗
    # login_btn = driver.find_element_by_id("login-btn")
    # ActionChains(driver).move_to_element(login_btn).context_click().perform()     #右击
    # ActionChains(driver).move_to_element(login_btn).click().perform()             # 单击登录按钮
    # drag_btn = driver.find_element_by_class_name("drag-btn")                      # 获取滑块对象
    # ActionChains(driver).move_to_element(drag_btn).click_and_hold().perform()     #左键按住滑块
    # ActionChains(driver).drag_and_drop_by_offset(drag_btn,268,0).perform()  #对应起始位置的横坐标距离与纵坐标距离
    # time.sleep(2)
    # driver.save_screenshot("shuijv.png")

    '''
        填充表单 
            index 索引从 0 开始
            value是option标签的一个属性值,并不是显示在下拉框中的值
            visible_text是在option标签文本的值,是显示在下拉框的值
    '''
    # driver.get("http://tool.chacuo.net/cryptdes")
    # driver.maximize_window()  # 最大化窗口
    # s = Select(driver.find_element_by_class_name("h30"))
    # s.select_by_visible_text("CFB")
    # s.select_by_index('2')
    # s.select_by_value("cbc")
    # time.sleep(2)
    # driver.save_screenshot("select.png")

    '''
        弹窗处理 driver.switch_to.alert
                accept()   点击Alert的【确认】按钮
                authenticate(username,password)    给需要验证的Alert发送账号和密码,默认点击OK
                dismiss()  点击Alert的【取消】按钮
                send_keys(keysToSend)  在Alert的输入框输入信息
                text   获取Alert上的文言信息
                switch_to.alert    切换到Alert
    '''
    # driver.get("https://www.etax-gd.gov.cn/sso/login?service=https://www.etax-gd.gov.cn/xxmh/html/index_login.html?bszmFrom=1&t=1561426315919")
    # driver.maximize_window()
    # driver.find_element_by_class_name("layui-layer-btn1").click()
    # time.sleep(1)
    # driver.find_element_by_id("upLoginButton").click()
    # time.sleep(1)
    # driver.switch_to.alert().accept()
    # driver.save_screenshot("alert.png")

    '''
     页面前进和后退 
        driver.forward()     #前进
        driver.back()        # 后退
        driver.refresh()
    '''
    # driver.get("https://www.runoob.com/python3/python3-func-zip.html")
    # driver.maximize_window()
    # driver.back()
    # driver.forward()
    # driver.refresh()

    '''
        页面等待: 隐式等待是等待特定的时间,显式等待是指定某一条件直到这个条件成立时继续执行。
        1、显式等待
            API如下:
            title_is
            title_contains
            presence_of_element_located
            visibility_of_element_located
            visibility_of
            presence_of_all_elements_located
            text_to_be_present_in_element
            text_to_be_present_in_element_value
            frame_to_be_available_and_switch_to_it
            invisibility_of_element_located
            element_to_be_clickable – it is Displayed and Enabled.
            staleness_of
            element_to_be_selected
            element_located_to_be_selected
            element_selection_state_to_be
            element_located_selection_state_to_be
            alert_is_present
            
        2、隐式等待
        driver.implicitly_wait(10) # seconds 可理解为超时时间
    '''
    # 显式
    driver.get("http://www.xxxxx.com/loading")
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
    # 隐式
    driver.implicitly_wait(10)  # seconds
    driver.get("http://www.xxxxx.com/loading")
    myDynamicElement = driver.find_element_by_id("myDynamicElement")

except NameError as e:
    print(e)
finally:
    # 关闭浏览器 driver.close()关闭当前窗口 driver.quit()退出驱动关闭所有窗口
    # driver.close()
    driver.quit()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然,我可以帮你输出一篇Selenium学习笔记。以下是一份简单的学习笔记供参考: Selenium学习笔记 Selenium是一款用于自动化Web应用程序测试的强大工具。它提供了一组丰富的API,可以与各种编程语言(如Python、Java、C#等)结合使用,以实现Web应用程序的自动化测试。 1. 安装和配置 首先,你需要安装Selenium库。如果你使用Python,可以使用以下命令安装: ``` pip install selenium ``` 安装完成后,你还需要下载并配置相应的浏览器驱动程序。Selenium支持各种浏览器,如Chrome、Firefox、Safari等。你可以在Selenium官方网站上找到相应的驱动程序下载链接。 2. 基本操作 Selenium提供了一系列方法来模拟用户在浏览器中的操作,如打开URL、点击元素、输入文本等。以下是一些常用的基本操作示例: - 打开浏览器并访问URL: ```python from selenium import webdriver driver = webdriver.Chrome() # 使用Chrome浏览器驱动 driver.get("https://www.example.com") # 打开指定URL ``` - 查找元素并操作: ```python element = driver.find_element_by_id("element_id") # 根据元素ID查找 element.click() # 点击元素 input_element = driver.find_element_by_name("input_name") # 根据元素名称查找 input_element.send_keys("Hello, World!") # 输入文本 ``` - 执行JavaScript代码: ```python driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 滚动到页面底部 ``` 3. 高级操作 Selenium还提供了一些高级操作,如处理弹窗、切换窗口、等待元素加载等。以下是一些常用的高级操作示例: - 处理弹窗: ```python alert = driver.switch_to.alert # 切换到弹窗 alert.accept() # 接受弹窗 confirm = driver.switch_to.alert # 切换到确认框 confirm.dismiss() # 取消确认框 ``` - 切换窗口: ```python window_handles = driver.window_handles # 获取所有窗口句柄 driver.switch_to.window(window_handles[-1]) # 切换到最后一个窗口 ``` - 等待元素加载: ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "element_id")) ) ``` 4. 测试框架 Selenium还可以与测试框架(如Pytest、JUnit等)结合使用,以便更好地组织和管理测试用例。你可以使用测试框架提供的断言方法来验证测试结果。 ```python import pytest def test_example(): driver = webdriver.Chrome() driver.get("https://www.example.com") assert "Example Domain" in driver.title # 断言页面标题包含指定文本 driver.quit() ``` 以上是一份简单的Selenium学习笔记,希望对你有所帮助。当然,Selenium还有很多其他功能和用法,你可以进一步深入学习和探索。祝你学习愉快!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值