Python__模块(OPT-自动化-Web端)__selenium

简介

自动化测试(Web端)

安装

pip install selenium


参数列表

element

定位1个元素

element

定位多个元素

elements

获取元素属性

element.get_attribute(name)

元素定位方式

元素id定位

By.ID

元素class定位

By.CLASS_NAME

元素name定位

By.NAME

完整超链接定位(链接文本内容)

By.TAG_NAME

css选择器进行定位

By.CSS_SELECTOR

xpath表达式定位

By.XPATH

浏览器

设置浏览器的大小

set_window_size(宽,高)

控制浏览器前进|后退

forward()|back()

清除文本

clear()

模拟按键输入

send_keys(value)

单击元素

click()

用于提交表单

submit()

设置该元素是否用户可见

is_displayed()

返回元素的尺寸

size

获取元素的文本

text

请求网页

get(网址)

刷新浏览器

refresh()

关闭浏览器

quit()

关闭当前窗口

close()

执行JavaScripts代码

execute_script('js代码')

页面窗口

用于获取当前页面的标题

title

获得当前页面的UR

current_url

获取搜索条目的文本信息

text

保存网页截图

save_screenshot('screen.png')

获得当前窗口句柄

current_window_handle

返回所有窗口的句柄到当前会话

window_handles

用于截取当前窗口,并把图片保存到本地

get_screenshot_as_file(self, filename)

用于切换到相应的窗口

switch_to.window(driver.window_handlers[index])

鼠标 / 键盘事件

【注释】

  在WebDriver中,将这些关于鼠标操作的方法,

  封装在ActionChanis类提供

【ActionChains基本用法】

  执行原理:当你调用ActionChains的方法时,不会立即执行,

  而是会将所有的操作按顺序存放在一个队列里

  当你调用perform()方法时,队列中的时间会依次执行

【例子】

  event=ActionChains(driver)

  event.key_down(Keys.CONTROL, enter)

鼠标事件

单击

click(on_element=None)

左键,不松开

click_and_hold(on_element=None)

右键

context_click(on_element=None)

双击

double_click(on_element=None)

从当前位置移动到某个坐标

move_by_offset(xoffset, yoffset)

移动到某个元素

move_to_element(to_element)

拖动元素1到元素2

drag_and_drop(元素1,元素2)

执行鼠标悬停操作

move_to_element(above)

用于模拟鼠标右键操作,在调用时需要指定元素定位

context_click()

在某个元素位置松开鼠标左键

release(on_element=None)

拖拽到某个坐标然后松开

drag_and_drop_by_offset(source, xoffset, yoffset)

移动到距某个元素(左上角坐标)多少距离的位置

move_to_element_with_offset(to_element, xoffset, yoffset)

执行链中的所有动作,

执行所有ActionChains中存储的行为。

perform()

键盘事件

按下键

key_down(value, element=None)

松开键

key_up(value, element=None)

输入内容

send_key(内容)

删除键(BackSpace)

send_keys(Keys.BACK_SPACE)

空格键(Space)

send_keys(Keys.SPACE)

制表键(Tab)

send_keys(Keys.TAB)

回退键(Esc)

send_keys(Keys.ESCAPE)

回车键(Enter)

send_keys(Keys.ENTER)

全选(Ctrl+A)

send_keys(Keys.CONTROL,'a')

复制(Ctrl+C)

send_keys(Keys.CONTROL,'c')

剪切(Ctrl+X)

send_keys(Keys.CONTROL,'x')

粘贴(Ctrl+V)

send_keys(Keys.CONTROL,'v')

键盘F1...Fn

send_keys(Keys.F1...Fn)

发送某个键到当前焦点的元素

send_keys(*keys_to_send)

发送某个键到指定元素

send_keys_to_element(element, *keys_to_send)

iframe获取

将当前定位的主体切换为frame/iframe表单的内嵌页面中

switch_to_frame()

跳回最外层的页面

switch_to_default_content()

默认可以直接取表单的id 或name属性。

如果iframe没有可用的id和name属性,

则可以 通过下面的方式进行定位。

switch_to.frame()

警告框处理

【注释】

  在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单

  具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用    text/accept/dismiss/ send_keys等方法进行操作。

返回alert/confirm/prompt中的文字信息text

接收现有警告框

accept()

解散现有警告框

dismiss()

发送文本至警告框,keysToSend;

将文本发送至警告框

send_keys(keysToSend)

下拉框选择

【注释】

  下拉框选择操作(导入选择下拉框Select类,使用该类处理下拉框操作。)

select标签的value属性的值

select_by_value('选择值')

下拉框的索引

select_by_index('索引值')

下拉框的文本值

select_by_visible_testx('文本值')

cookie获取

【注释】

  WebDriver提供了操作Cookie的相关方法,

  可以读取、添加和删除cookie信息。

获得所有cookie信息

get_cookies()

返回字典的key为'name'的cookie信息

get_cookie(name)

添加cookie.'cookie_dict'指字典为对象,必须有name和value值

add_cookie(cookie_dict)

删除cookie信息.“name”是要删除的cookie的名称

delete_cookie(name,optionsString)

【参数】

optionsString:cookie的选项,目前支持的选项包括“路径”,“域”

删除所有cookie信息

delete_all_cookies()


参考代码

【综合】初始化配置

class web:
    def __init__(self) -> None:
        self.headers={
           'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
           'Connection': 'close'
        }
        self.path=''
        self.chrome='chromedriver.exe'
        self.ie='C:/Users/Administrator/Documents/IEDriverServer.exe'
        self.driver=webdriver.Ie(self.ie)
        self.url='https://www.xxx.com/'
        self.time = 5
        self.keywords='demo'

【综合】模式-有界面形态1

def imitate(self):
    #----------------------有界面形态-----------------------#
    from selenium.webdriver.common.by import By  # 新版本修改
    driver = self.driver
    driver.get("http://www.xxx.com/")

    ''' 设置浏览器的大小 '''
    driver.set_window_size(1600, 600)
    
    ''' 输入内容 '''
    driver.find_element(By.ID, "kw").send_keys("美女")
    time.sleep(1)
    
    ''' 点击按钮 '''
    driver.find_element(By.ID, "su").click()
    time.sleep(1)
    
    ''' 通过javascript设置浏览器窗口的滚动条位置 '''
    js = "window.scrollTo(100,1200);"
    driver.execute_script(js)
    time.sleep(1)
    
    ''' 截取当前窗口,并指定截图图片的保存位置 '''
    driver.get_screenshot_as_file("img.jpg")
    
    ''' 不关闭浏览器 '''
    input("")

【综合】模式-有界面形态2  

def o_driver(self):
    ''' 正在运行的浏览器进行操作 '''
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.chrome.service import Service
    from lxml import etree
    import requests

    # 运行步骤: 先开启远程调试端口,自定义网页,连接端口测试
    # -> 步骤1
    # cmd 运行: start chrome.exe --remote-debugging-port=9527 --user-data-dir=./
    # 打开的浏览器中,自定义网页
    
    # -> 步骤2:进行端口连接
    # 获取浏览器控制权
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9527")
    # 浏览器驱动存放路径
    chrome_driver = Service("chromedriver.exe")
    driver = webdriver.Ie(service=chrome_driver, options=chrome_options)
    # 窗口切换
    window_handles = driver.window_handles
    index = 0  # 0 代表当前窗口 -1: 左  1: 右
    driver.switch_to.window(window_handles[index])
    address = driver.current_url
    # 请求网页
    html = requests.get(url=address, headers=self.headers)
    tree = etree.HTML(html.content)
    list = tree.xpath("//*/title/text()")
    print(list)

【综合】模式-无界面形态

def imitate_2(self):
    #----------------------无界面形态-----------------------#
    """
    chrome_options = webdriver.ChromeOptions()
    # 增加无界面选项
    chrome_options.headless=True
    browser = webdriver.Chrome(options = chrome_options)
    browser.get('https://www.xxx.com/')
    print(browser.title)
    browser.quit()
    """
    from selenium import webdriver
    import time
    from selenium.webdriver.chrome.options import Options

    chrome_options = Options()
    chrome_options.add_argument("--no-sandbox")                        # 解决DevToolsActivePort文件不存在的报错
    chrome_options.add_argument("window-size=1920x3000")               # 指定浏览器分辨率
    chrome_options.add_argument("--disable-gpu")                       # 谷歌文档提到需要加上这个属性来规避bug
    chrome_options.add_argument("--hide-scrollbars")                   # 隐藏滚动条, 应对一些特殊页面
    chrome_options.add_argument("blink-settings=imagesEnabled=false")  # 不加载图片, 提升速度
    chrome_options.add_argument("--headless")                          # / 浏览器不提供可视化页面. 
                                                                       # linux下如果系统不支持可视化不加这条会启动失败
                                                                       # ------------------------------------------- /
    chrome_options.binary_location = (
        "C:/Program Files/Google/Chrome/Application/chrome.exe"        # 手动指定本机电脑使用的浏览器位置
    )

    # / 创建一个driver,进行后面的请求页面等操作,
    # executable_path指定本机中chromedriver.exe的位置
    # ---------------------------------------------- /
    browser = webdriver.Chrome(
        chrome_options=chrome_options, executable_path="chromedriver.exe"
    )
    browser.get("https://www.xxx.com/")
    print(browser.title)
    browser.quit()
    pass

【综合】Event事件

def event(self):
    # -*- coding: utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.by import By
    from time import sleep

    driver = webdriver.Ie(executable_path ='C:/Users/Administrator/Documents/IEDriverServer.exe')
    driver.implicitly_wait(10)
    driver.maximize_window()
    driver.get('http://sahitest.com/demo/mouseover.htm')

    ''' 鼠标移动到此元素,在下面的input框中会显示(Mouse moved) '''
    write = driver.find_element(By.XPATH,'//input[@value='Write on hover']')
    ''' 鼠标移动到此元素,会清空下面input框中的内容 '''
    blank = driver.find_element(By.XPATH,'//input[@value='Blank on hover']') 
    result = driver.find_element(By.NAME,'t1')
    
    action = ActionChains(driver)

    ''' 移动到write,显示(Mouse moved) '''
    action.move_to_element(write).perform()      
    print(result.get_attribute('value'))

    # action.move_to_element(blank).perform()
    ''' 移动到距离当前位置(10,50)的点,与上句效果相同,移动到blank上,清空 '''
    action.move_by_offset(10, 50).perform()     
    print(result.get_attribute('value'))

    ''' 移动到距离blank元素(10,-40)的点,可移动到write上 '''
    action.move_to_element_with_offset(blank, 10, -40).perform() 
    print(result.get_attribute('value'))
    sleep(2)

【综合】模拟鼠标

def event_m(self):
    # -*- coding: utf-8 -*-
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.by import By
    from time import sleep

    driver = webdriver.Ie(executable_path ='C:/Users/Administrator/Documents/IEDriverServer.exe')
    driver.implicitly_wait(10)
    driver.maximize_window()
    driver.get('http://sahitest.com/demo/dragDropMooTools.htm')

    dragger = driver.find_element(By.ID,'dragger')                 # 被拖拽元素
    item1 = driver.find_element(By.XPATH,'//div[text()='Item 1']') # 目标元素1
    item2 = driver.find_element(By.XPATH,'//div[text()='Item 2']') # 目标2
    item3 = driver.find_element(By.XPATH,'//div[text()='Item 3']') # 目标3
    item4 = driver.find_element(By.XPATH,'//div[text()='Item 4']') # 目标4

    action = ActionChains(driver)

    ''' 1.移动dragger到item1 ''' 
    action.drag_and_drop(dragger, item1).perform()                              
    sleep(2)
    
    ''' 2.效果与上句相同,也能起到移动效果 '''
    action.click_and_hold(dragger).release(item2).perform()                     
    sleep(2)
    
    ''' 3.效果与上两句相同,也能起到移动的效果 '''
    action.click_and_hold(dragger).move_to_element(item3).release().perform()   
    sleep(2)
    
    ''' 4.移动到指定坐标 '''
    # action.drag_and_drop_by_offset(dragger, 400, 150).perform()               
    
    ''' 5.与上一句相同,移动到指定坐标 ''' 
    action.click_and_hold(dragger).move_by_offset(400, 150).release().perform() 
    sleep(2)
    driver.quit()

【综合】模拟按键

def event_k(self):
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from time import sleep

    driver = webdriver.Ie(executable_path ='C:/Users/Administrator/Documents/IEDriverServer.exe')
    driver.implicitly_wait(10)
    driver.maximize_window()
    driver.get('http://sahitest.com/demo/keypress.htm')

    key_up_radio = driver.find_element(By.ID,'r1')         # 监测按键升起
    key_down_radio = driver.find_element(By.ID,'r2')       # 监测按键按下
    key_press_radio = driver.find_element(By.ID,'r3')      # 监测按键按下升起

    enter = driver.find_elements(By.XPATH,'//form[@name='f1']/input')[1]   # 输入框
    result = driver.find_elements(By.XPATH,'//form[@name='f1']/input')[0]  # 监测结果

    ''' 监测key_down '''
    key_down_radio.click()
    ActionChains(driver).key_down(Keys.CONTROL, enter).key_up(Keys.CONTROL).perform()
    print(result.get_attribute('value'))

    ''' 监测key_up '''
    key_up_radio.click()
    enter.click()
    ActionChains(driver).key_down(Keys.SHIFT).key_up(Keys.SHIFT).perform()
    print (result.get_attribute('value'))

    ''' 监测key_press '''
    key_press_radio.click()
    enter.click()
    ActionChains(driver).send_keys('a').perform()
    print (result.get_attribute('value'))
    driver.quit()

    ''' 组合键 '''
    # action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform() # ctrl+a
    # action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform() # ctrl+c

<think>我们正在处理用户关于Python自动化运维教程的查询。用户希望获得详细的学习指南。根据引用内容,我们可以总结出几个关键领域:应用部署、测试、维护和升级。我们将构建一个结构化的学习路径,涵盖这些主题,并提供实际代码示例。 步骤: 1. 介绍Python自动化运维的重要性 2. 分模块讲解:部署、测试、维护、升级 3. 每个模块提供理论解释和代码示例 4. 总结学习路径 5. 生成相关问题 注意:引用内容中提供的代码示例(如xlwings处理Excel)与自动化运维的核心任务(部署、测试等)关联不大,因此我们将使用更相关的示例(如Ansible、Fabric、Selenium等)。 由于引用[3]中提到了Ansible、Fabric、Selenium等工具,我们将围绕这些工具展开。 但是请注意,引用[1][2][4]中的内容并不直接相关,因此我们主要参考引用[3]的内容,并补充其他相关知识。 由于用户要求详细教程,我们将尽量提供具体的学习步骤和示例代码。 开始构建回答:</think>### Python自动化运维详细教程指南 Python自动化运维领域应用广泛,主要涵盖部署、测试、维护和升级四个核心场景。以下是系统化的学习路径和具体实践方法: #### 一、基础环境搭建 1. **Python环境配置** - 安装Python 3.8+版本(推荐使用Pyenv管理多版本) - 创建虚拟环境:`$ python -m venv ops-env` - 安装核心库:`$ pip install fabric paramiko ansible` 2. **SSH密钥配置** ```python # 生成密钥对 from cryptography.hazmat.primitives.asymmetric import rsa private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048) ``` #### 二、核心应用场景实战 1. **自动化部署** - 使用Fabric执行远程命令: ```python from fabric import Connection def deploy_app(): with Connection('web-server') as c: c.put('app.tar.gz', remote='/opt/') c.run('tar -xzf /opt/app.tar.gz') c.sudo('systemctl restart nginx') ``` 2. **自动化测试** - Selenium实现Web应用测试: ```python from selenium import webdriver def test_login(): driver = webdriver.Chrome() driver.get("http://app-test/env") assert "Login Page" in driver.title driver.quit() ``` 3. **系统维护自动化** - 日志监控脚本示例: ```python import subprocess def check_disk_usage(threshold=80): result = subprocess.run(['df', '-h'], capture_output=True) for line in result.stdout.splitlines(): if '/dev/sda' in str(line): usage = int(line.split()[4].replace('%', '')) if usage > threshold: send_alert(f"磁盘使用率过高: {usage}%") ``` 4. **应用升级自动化** - Git集成升级流程: ```python import git def update_app(repo_path): repo = git.Repo(repo_path) repo.remotes.origin.pull() if repo.is_dirty(): raise Exception("代码冲突,需手动解决") subprocess.run(['docker', 'compose', 'up', '--build', '-d']) ``` #### 三、学习资源推荐 1. **官方文档** - [Ansible官方文档](https://docs.ansible.com/) - [Paramiko SSH库文档](http://www.paramiko.org/) 2. **系统化教程** - 推荐《Python自动化运维:技术与最佳实践》(机械工业出版社) - Udemy课程《Automating Real-World Tasks with Python》 3. **实战项目** - 构建CI/CD流水线:GitLab CI + Ansible - 实现监控告警系统:Prometheus + Grafana + Python脚本 > 学习路径建议:先掌握Linux基础 → 学习Python核心语法 → 深入Paramiko/Fabric → 进阶Ansible → 集成监控工具[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vip飞梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值