【自动化Selenium】Python 网页自动化测试脚本(上)
目录
1、Selenium介绍
2、Selenium环境安装
3、创建浏览器、设置、打开
4、打开网页、关闭网页、浏览器
5、浏览器最大化、最小化
6、浏览器的打开位置、尺寸
7、浏览器截图、网页刷新
8、元素定位
9、元素交互操作
10、元素定位
(1)ID定位
(2)NAME定位
(3)CLASS_NAME定位
(4)TAG_NAME定位
(5)LINK_TEXT定位
(6)PARTIAL_LINK_TEXT定位
(7)CSS_SELECTOR定位
(8)XPATH定位
1、Selenium介绍
(1)自动化:自动化是指使用技术手段模拟人工。执行重复性任务,准确率100%,高于人工。
(2)自动化应用场景:自动化测试;自动化运维;自动化办公;自动化游戏
(3)Selenium:是web自动化中的知名开源库,通过浏览器驱动控制浏览器,通过元素定位模拟人工交换;支持多种浏览器;跨平台、兼容性高;以实现web自动化(无焦点状态依然执行)
2、Selenium环境安装
(1)浏览器的安装
安装好了看版本右上角三个点->[帮助]->[关于Google Chrome ],然后关闭Chrome浏览器自动更新服务[开始搜索‘服务’,关于Chrome的都可以禁用]!!!
(2)浏览器驱动的安装
Chrome for Testing availability
保证浏览器与驱动大版本一致
下载后就可以拖到工程项目中了
3、创建浏览器、设置、打开
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动#创建设置浏览器对象
q1=Options()#禁用沙盒模式
q1.add_argument('--no-sandbox')#保持浏览器打开状态(默认是代码执行完毕后自动关闭)
q1.add_experimental_option('detach',True)#创建并启动浏览器
a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)
点击运行就会打开Chrome浏览器
注意:沙盒模式在有些电脑必须设置的,因为存在某些冲突,所以必须设置,但是大多数电脑时可以不用添加的!
4、打开网页、关闭网页、浏览器
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
import time#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(3)
#关闭当前标签页[只会关闭一个标签页;当只有一个标签页时,就相当于关闭浏览器]
a1.close()
time.sleep(3)
#退出浏览器
a1.quit()
页面的渲染是需要花费时间的,所以大家酌情添加time.sleep(second)
5、浏览器最大化、最小化
from os import times_resultfrom selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
import time#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)
#浏览器的最大化
a1.maximize_window()
time.sleep(2)
#浏览器的最小化
a1.minimize_window()
6、浏览器的打开位置、尺寸
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
import time#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)
#浏览器的打开位置
a1.set_window_position(0,0)
#浏览器打开尺寸
a1.set_window_size(600,600)
7、浏览器截图、网页刷新
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
import time#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)
#浏览器截图
a1.get_screenshot_as_file('1.png')
time.sleep(2)
#刷新当前网页
a1.refresh()
8、元素定位
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)
#定位一个元素[找到的话返回结果,找不到的话就会返回空列表]
a2=a1.find_element(By.ID,'kw')
print(a2)#定位多个元素[找到的话返回列表,找不到的话直接报错]
a3=a1.find_elements(By.ID,'kw')
print(a3)
9、元素交互操作
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)
a2=a1.find_element(By.ID,'kw');
#元素输入
a2.send_keys('自动化测试')
time.sleep(2)
#元素清空
a2.clear()
time.sleep(2)
#元素输入
a2.send_keys('测试')
#元素点击
a1.find_element(By.ID, 'su').click()
10、元素定位
(1)ID定位
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)#元素定位——ID
#1、一般通过ID定位元素使比较准确的
#2、并不是所有的网页或者元素都有ID值
a1.find_element(By.ID,'kw').send_keys('自动化测试')
(2)NAME定位
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)#元素定位——NAME
#1、一般通过name定位元素是比较准确的
#2、并不是所有的网页或者元素都有name值
a1.find_element(By.NAME,'wd').send_keys('自动化测试')
(3)CLASS_NAME定位
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)#元素定位——CLASS_NAME
#1、class值不能有空格,否则报错
#2、class值会有重复的,所以需要切片处理
#3、class值有的网站是随机的,这时候就不得不用别的定位方式哦
a1.find_elements(By.CLASS_NAME,'c-font-normal')[1].click()
(4)TAG_NAME定位
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()
#打开指定网址
a1.get('http:/bilibili.com/')
time.sleep(2)#元素定位——TAG_NAME
#找出<开头便签名字>
a1.find_elements(By.TAG_NAME,'a')[6].click()
(5)LINK_TEXT定位
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)#元素定位——LINK_TEXT
#通过精准链接文本找到标签a的元素[精准文本]
#有重复的文本,需要切片
a1.find_element(By.LINK_TEXT,'新闻').click()
(6)PARTIAL_LINK_TEXT定位
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()
#打开指定网址
a1.get('http:/bilibili.com/')
time.sleep(2)#元素定位——PARTIAL_LINK_TEXT
#通过模糊链接文本找到标签a的元素[模糊文本]
#有重复的文本,需要切片
a1.find_element(By.PARTIAL_LINK_TEXT,'音').click()
(7)CSS_SELECTOR定位
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)#元素定位——CSS_SELECTOR
#1、通过id定位——#id
#2、通过class值定位——.class
#3、通过标签头定位——标签头
#4、通过任意类型定位:"[类型='精准值']"
#5、通过任意类型定位:"[类型*='模糊值']"
#6、通过任意类型定位:"[类型^='开头值']"
#7、通过任意类型定位:"[类型$'结尾值']"
a1.find_element(By.CSS_SELECTOR,'#kw').send_keys('hello')
(8)XPATH定位
Copy XPath:通过属性+路径定位,属性如果是随机的就定位不到
Copy full XPath:完整路径(缺点是定位值比较长,优点是基本100%正确)
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)#元素定位——XPath
a1.find_element(By.XPATH,'//*[@id="kw"]').send_keys('hello')
from selenium import webdriver #用于操作浏览器
from selenium.webdriver.chrome.options import Options #用于设置谷歌浏览器
from selenium.webdriver.chrome.service import Service #用于管理驱动
from selenium.webdriver.common.by import By
import time
#设置浏览器、启动浏览器
def func():q1=Options()q1.add_argument('--no-sandbox')q1.add_experimental_option('detach',True)a1=webdriver.Chrome(service=Service('chromedriver.exe'),options=q1)return a1
a1=func()
#打开指定网址
a1.get('http:/baidu.com/')
time.sleep(2)#元素定位——XPath
a1.find_element(By.XPATH,'/html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input').send_keys('hello')
相关文章:
【自动化Selenium】Python 网页自动化测试脚本(上)
目录 1、Selenium介绍 2、Selenium环境安装 3、创建浏览器、设置、打开 4、打开网页、关闭网页、浏览器 5、浏览器最大化、最小化 6、浏览器的打开位置、尺寸 7、浏览器截图、网页刷新 8、元素定位 9、元素交互操作 10、元素定位 (1)ID定位 &…...
什么是MyBatis?
MyBatis简介 MyBatis是一款优秀的持久层框架,用于简化Java应用程序对数据库的操作。它曾是Apache的一个开源项目,名为iBatis,2010年迁移到Google Code并改名为MyBatis,2013年11月又迁移到了GitHub。 一、MyBatis的作用 在JavaE…...
TortoiseGit 将本地已有仓库推送到远程
TortoiseGit 将本地已有仓库推送到远程 一、创建线上仓库二、创建本地仓库三、提交内容到本地仓库四、添加远程仓库地址补充 一、创建线上仓库 在gitlab管理面页面按这前讲过的步骤创建一个空仓库。(通常我们把服务器上这个仓库叫远程仓库,把我们自己电…...
腾讯云OCR车牌识别实践:从图片上传到车牌识别
在当今智能化和自动化的浪潮中,车牌识别(LPR)技术已经广泛应用于交通管理、智能停车、自动收费等多个场景。腾讯云OCR车牌识别服务凭借其高效、精准的识别能力,为开发者提供了强大的技术支持。本文将介绍如何利用腾讯云OCR车牌识别…...
TailwindCss 总结
目录 一、简介 二、盒子模型相关 三、将样式类写到一个类里面apply 四、一款TailWind CSS的UI库 一、简介 官方文档:Width - TailwindCSS中文文档 | TailwindCSS中文网 Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何 模板中的 CSS 类…...
Java与C#
Java和C#(C Sharp)是两种流行的面向对象编程语言,它们在很多方面非常相似,因为它们都受到了类似的编程范式和语言设计理念的影响。然而,它们之间也存在一些重要的区别。 平台依赖性: Java:Java是…...
leetcode:222完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最…...
[STM32]从零开始的STM32 FreeRTOS移植教程
一、前言 如果能看到这个教程的话,说明大家已经学习嵌入式有一段时间了。还记得嵌入式在大多数时候指的是什么吗?是的,我们所说的学习嵌入式大部分时候都是在学习嵌入式操作系统。从简单的一些任务状态机再到复杂一些的RTOS,再到最…...
java——Tomcat连接池配置NIO、BIO、APR
Tomcat连接池的配置涉及不同的IO模型,包括NIO(Non-blocking IO,非阻塞IO)、APR(Apache Portable Runtime,Apache可移植运行库)和BIO(Blocking IO,阻塞IO)。以…...
跨域相关的一些问题 ✅
当网页从一个源(https://baidu.com)请求另一个源(如 https://taobao/api)的资源时,就发生了跨域。由于安全原因(防止恶意网站通过脚本访问用户在其他网站上的数据),浏览器对跨域请求…...
RPC学习
一、什么是 RPC RPC(Remote Procedure Call),即远程过程调用,是一种计算机通信协议,它允许运行在一台计算机上的程序调用另一台计算机上的子程序或函数,就好像调用本地程序中的函数一样,无需程序…...
coe文件转mif(c语言)
1 mif文件格式 DEPTH=1024; --The size of data in bits WIDTH=16; --The size of memory in words ADDRESS_RADIX = DEC; --The radix for address values DATA_RADIX = UNS...
【leetcode】动态规划
31. 873. 最长的斐波那契子序列的长度 题目: 如果序列 X_1, X_2, ..., X_n 满足下列条件,就说它是 斐波那契式 的: n > 3对于所有 i 2 < n,都有 X_i X_{i1} X_{i2} 给定一个严格递增的正整数数组形成序列 arr ࿰…...
介绍一下atoi(arr);(c基础)
hi , I am 36 适合对象c语言初学者 atoi(arr);是返回整数(int型),整数是arr数组中字符中数字 格式 #include<stdio.h> atoi(arr); 返回值arr数组中的数字 未改变arr数组 #include<stdlib.h>//atoi(arr); 返 <stdlib> int main(…...
docker入门学习笔记
docker的定义 docker是一个用于构建、运行、传送 应用程序的平台。 为什么要使用docker ? 在开发测试库环境中测试成功后,打包成集装箱,到生产环境也是能够成功的。而传统的安装方式不仅繁琐,并且在测试环境安装后,到…...
使用Python和Pybind11调用C++程序(CMake编译)
目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补,本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境: Linux gnuPython3.10…...
tableau-制作30个图表
制作条形图 步骤: 1、横轴是数值,对应了某一个度量值,纵轴是一个标签 战区的成交额,条形图横轴是战区,纵轴是成交额 下钻条形图 1、增加业务架构-战区右键点击,分层结构,增加分层结构 调整业务架构,将战区,城市,小组移动到业务架构下方 此时的条形图上方有➕号展开后…...
2024APMCM亚太杯数学建模C题【宠物行业】原创论文分享
大家好呀,从发布赛题一直到现在,总算完成了2024 年APMCM亚太地区大学生数学建模竞赛C题的成品论文。 给大家看一下目录吧: 目录 摘 要: 10 一、问题重述 14 二.问题分析 15 2.1问题一 15 2.2问题二 15 2.3问题三…...
C语言解析命令行参数
原文地址:C语言解析命令行参数 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 C语言有一个 getopt 函数,可以对命令行进行解析,下面给出一个示例,用的时候可以直接copy过去修改,很方便…...
推荐一款龙迅HDMI2.0转LVDS芯片 LT6211UX LT6211UXC
龙迅的HDMI2.0转LVDS芯片LT6211UX和LT6211UXC是两款高性能的转换器芯片,它们在功能和应用上有所差异,同时也存在一些共同点。以下是对这两款芯片的详细比较和分析: 一、LT6211UX 主要特性: HDMI2.0至LVDS和MIPI转换器。HDMI2.0输…...
libmodbus 源码学习笔记
1.核心函数_框架_数据结构 整个通信的过程 就是上面这个框架 下面就是具体过程 <1> 主设备 我们首先要初始化 我们要使用的串口 然后 设置我们要访问的哪一个设备 最后打开串口 <2>从机设备 也是我们要初始化我们的串口 然后随后立即设置我们的串口设备地址 最后…...
通用网络安全设备之【防火墙】
概念: 防火墙(Firewall),也称防护墙,它是一种位于内部网络与外部网络之间的网络安全防护系统,是一种隔离技术,允许或是限制传输的数据通过。 基于 TCP/IP 协议,主要分为主机型防火…...
Vue.js基础——贼简单易懂!!(响应式 ref 和 reactive、v-on、v-show 和 v-if、v-for、v-bind)
Vue.js是一个渐进式JavaScript框架,用于构建用户界面。它专门设计用于Web应用程序,并专注于视图层。Vue允许开发人员创建可重用的组件,并轻松管理状态和数据绑定。它还提供了一个虚拟DOM系统,用于高效地渲染和重新渲染组件。Vue以…...
Mybatis 执行存储过程,获取输出参数的值
数据库环境:SQL Server 2008 R2 存储过程 alter procedure proc_generateOuterApplyId acceptType varchar(4),acceptGroupId int,outerApplyId varchar(20) output as begin set nocount onset outerApplyId 24GD6688--select outerApplyId as …...
RAG架构类型
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
Oracle 数据库 IDENTITY 列的性能选项
在上一篇文章Oracle 数据库 IDENTITY 列中,我们介绍了Oracle IDENTITY列的基础知识。本文将介绍IDENTITY列的几个性能选项。由于IDENTITY列内部使用sequence机制,因此也等同于是sequence的性能选项。 由于sequence是递增的,在高并发时&#…...
计算(a+b)/c的值
计算(ab)/c的值 C语言代码C语言代码Java语言代码Python语言代码 💐The Begin💐点点关注,收藏不迷路💐 给定3个整数a、b、c,计算表达式(ab)/c的值,/是整除运算。 输入 输入仅一行&…...
OpenCV从入门到精通实战(八)——基于dlib的人脸关键点定位
本文使用Python库dlib和OpenCV来实现面部特征点的检测和标注。 下面是代码的主要步骤和相关的代码片段: 步骤一:导入必要的库和设置参数 首先,代码导入了必要的Python库,并通过argparse设置了输入图像和面部标记预测器的参数。…...
unity | 动画模块之卡片堆叠切换
一、预览动画 可以放很多图,可以自己往后加,可以调图片x轴和y轴间距,可以调图片飞出方向,可以调堆叠方向。 图1 图片堆叠动画预览 二、纯净代码 有粉丝问我这个效果,最近很忙,没有时间细写,先…...
前端开发工程师需要学什么?
前端开发工程师需要学习的主要内容包括HTML、CSS、JavaScript、前端框架、响应式设计、性能优化、版本控制等。 HTML/CSS/JavaScript HTML:是网页的骨架,负责网页的结构和内容。CSS:用于美化网页,设计样式和布局。…...
中华人民共和国建设厅官方网站/网络营销与策划试题及答案
从效率考虑:cookie > memcache > 数据库cookie对服务器端负载没影响,如果加密、解密会多消耗一点点cpu。带宽倒是会消耗得多一点,同域名下的所有http request header都会附带cookie,所以在大流量下,把js、css、图…...
wordpress app无法登陆/seo信息优化
1 序列: 列表、元组与字符串都可以称为序列。序列拥有一种切片( Slicing) 运算符,它能够允许我们获取序列中的某段切片——也就是序列之中的一部分。2 切片常用操作 shoplist [apple, mango, carrot, banana] #shoplist[-1]指的是…...
WordPress图片无缝/二级域名和一级域名优化难度
为了破解图形验证码,AI需要大量的图片数据。为了简单获取大量的图形来喂给Ai模型训练,索性自己写一把。代码来一发。。 import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.FileOutputStream; impo…...
佛山企业网站建设服务/网络营销成功的原因
解说linux启动流程 一:概述 关于linux的系统启动流程我们可以从下面图片中的流程一步一步展开,其实linux系统的启动过程中,我们可以比喻为一个接力赛,计算机的不同模块负责这个接力赛中接力棒的交接(为了更好的理解&a…...
做服装搭配图的网站有哪些/天津百度推广开户
今天小编整理了2021年Java校招极大概率会出现的99道面试题,大家一起来看看吧! Iterator和ListIterator的区别是什么? 2.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么? 3.Java中的HashMap的工作原理是什么? 4.hashCode()和equals()方法的…...
网站设计一个月多少钱/张家界网站seo
基于C语言的双人贪吃蛇游戏程序设计 实现目标 制作一个两个两个人一起同时玩的双人贪吃蛇游戏,有比分并记录历史成绩 (1) 打开游戏时能够自动播放背景音乐 (2) 开始菜单,显示历史用户名及其对应的成绩 (3) 开始菜单可以输入两人的用户名 (4) P1 可以通…...