[Python自动化办公]--从网页登录网易邮箱进行邮件搜索并下载邮件附件
[Python自动化办公]–从网页登录网易邮箱进行邮件搜索并下载邮件附件
使用说明
本文使用Python的selenium库进行操作邮箱登录、固定名称搜索邮件并下载附件,Python版本:3.9.16, selenium版本:4.19.0,EdgeBrowser版本:126.0.2592.87。
准备工作
安装Python及selenium不多赘述,可自行搜索安装,除了具备基本的Python编程知识外还需要了解网页知识。
安装Edge浏览器驱动:
查看当前使用的Edge浏览器版本:设置 -->关于 即可查看
驱动下载地址
下载并解压缩。记住文件路径,后面会用到。(浏览器会定期更新的话需要及时更新驱动)
编写代码
首先给出一段完整的代码,再来分步骤讲解。
完整demo
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from datetime import datetime, timedelta
import timedef input_info():'''用于生成文件名称字符如果你需要自动下载的邮件名称是每天根据日期变化的可以参考此函数进行适当修改'''# 获取当天日期today = datetime.now().date()# 获取当天日期减去2天的日期target_date = today - timedelta(days=2)# 格式化日期为“4月6日”的形式formatted_date = target_date.strftime("%m月%d日").lstrip("0").replace("月0", "月")# 拼接字符串res = formatted_date + "你要的邮件"return resdriver_path = r"C:\Users\JA043204\Desktop\getMail\edgedriver_win64\msedgedriver.exe"
edge_options = Options()
edge_options.use_chromium = True # 如果正在使用新的基于 Chromium 的 Edge,设置为 True
service = Service(executable_path=driver_path)driver = webdriver.Edge(service=service, options=edge_options)# 打开登录页面
driver.get("https://mailh.qiye.163.com/")# 填写用户名和密码
usrname = "yourusrname" # 需替换为自己的用户名
pwd = "yourpwd" # 需替换为自己的密码try:# 在 Selenium 4 中,推荐使用 find_element 方法代替 find_element_by_* 方法driver.find_element("id", "account_name").send_keys(usrname)driver.find_element("id", "password").send_keys(pwd)# 点击登录按钮driver.find_element("id", "submit-btn").click()# 等待一段时间,确保登录成功后的页面加载完成time.sleep(5)# 执行登录后的操作,比如获取用户信息等# 比如,获取登录后的页面标题print(driver.title)# 找到搜索的input框,并输入"质量部基础数据"input_box = driver.find_element(By.XPATH,'//input[@placeholder="搜索邮件"]')input_box.send_keys(input_info())# 发送回车键操作,触发搜索或相应的动作input_box.send_keys(Keys.RETURN)time.sleep(2)# 使用显式等待尝试定位元素target_div = WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.XPATH, ('//span[@class="summary-content summary-content-maxwidth"]'))))target_div.click() # 点击打开邮件time.sleep(2)# 找到邮件后定位到打包下载邮件附件相关元素tar_a = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//span[@class="save-all"]')))driver.execute_script("arguments[0].click();", tar_a)finally:# 关闭浏览器if input("是否关闭浏览器? (y/n): ").lower().startswith('y'):driver.quit()
导入必要包
from selenium import webdriver
:- 导入 Selenium 的 WebDriver 类,用于启动浏览器和执行操作。
from selenium.webdriver.edge.service import Service
:- 导入 Edge 浏览器的 Service 类,用于配置和启动 Edge 浏览器的 WebDriver 服务。
from selenium.webdriver.edge.options import Options
:- 导入 Edge 浏览器的 Options 类,用于设置 Edge 浏览器的选项,如设置浏览器启动参数。
from selenium.webdriver.support.ui import WebDriverWait
:- 导入 WebDriverWait 类,用于显式等待页面元素加载并设定等待条件。
from selenium.webdriver.common.by import By
:- 导入 By 类,用于指定查找元素的方法,例如通过 ID、Class Name、XPath 等。
from selenium.webdriver.support import expected_conditions as EC
:- 导入 expected_conditions 模块,这是 WebDriverWait 的一部分,包含了预期条件,如元素可见、元素存在、元素包含文本等。
配置浏览器驱动
driver_path = r"C:\Users\JA043204\Desktop\getMail\edgedriver_win64\msedgedriver.exe" # 替换为准备工作中的路径
edge_options = Options()
edge_options.use_chromium = True # 如果正在使用新的基于 Chromium 的 Edge,设置为 True
service = Service(executable_path=driver_path)driver = webdriver.Edge(service=service, options=edge_options)
打开网页
使用 driver.get()
方法,传入参数为登录界面url。
从浏览器中定位元素
-
从浏览器打开登录界面,然后 按下
F12
打开开发工具。
-
使用检查元素来定位网页内容
先点击检查元素工具图标,然后点击用户名输入框
这样就能快速找到该元素网页源码的位置
使用selenium定位元素
-
通过元素 ID 定位:
使用find_element_by_id
方法可以通过元素的 ID 属性来定位元素。例如:element = driver.find_element_by_id("element_id")
-
通过元素名称定位:
使用find_element_by_name
方法可以通过元素的名称属性来定位元素。例如:element = driver.find_element_by_name("element_name")
-
通过类名定位:
使用find_element_by_class_name
方法可以通过元素的类名来定位元素。注意,如果有多个元素具有相同的类名,它会返回第一个匹配的元素。例如:element = driver.find_element_by_class_name("element_class")
-
通过标签名定位:
使用find_element_by_tag_name
方法可以通过元素的标签名来定位元素。例如:element = driver.find_element_by_tag_name("tag_name")
-
通过链接文本定位:
使用find_element_by_link_text
方法可以通过链接的文本内容来定位元素。例如:element = driver.find_element_by_link_text("Link Text")
-
通过部分链接文本定位:
使用find_element_by_partial_link_text
方法可以通过链接的部分文本内容来定位元素。例如:element = driver.find_element_by_partial_link_text("Partial Link Text")
-
通过 XPath 表达式定位:
使用find_element_by_xpath
方法可以通过 XPath 表达式来定位元素。XPath 是一种强大的定位方式,可以根据元素的层次结构、属性等来精确定位元素。例如:element = driver.find_element_by_xpath("//div[@id='example']/p[1]")
-
通过 CSS 选择器定位:
使用find_element_by_css_selector
方法可以通过 CSS 选择器来定位元素。CSS 选择器也是一种强大的定位方式,可以根据元素的样式、层次结构等来定位元素。例如:element = driver.find_element_by_css_selector("div#example > p:first-child")
在完整demo代码中只用到了元素ID定位和XPath定位,以上是不同的定位方式,可根据个人喜好选择使用,下面再介绍一下啊XPath表达式定位:XPath 是一种用于在 XML 文档中定位和选择元素的查询语言。它同样适用于 HTML 文档,因为 HTML 也可以被视为一种 XML 变体。以下是 XPath 的基本写法和一些常用的表达式:
- 选择元素:
- 绝对路径:从根节点开始的路径,以斜杠
/
开头。例如:/html/body/div
- 相对路径:相对于当前节点的路径,以双斜杠
//
开头。例如://div/p
- 绝对路径:从根节点开始的路径,以斜杠
- 谓语(Predicate):用于过滤元素的附加条件,放在方括号内。
- 例如:
//div[@class='content']
选择 class 属性为 ‘content’ 的 div 元素。
- 例如:
- 选取节点:
nodename
:选择所有指定节点名的元素。例如://div
选择所有 div 元素。*
:选择当前节点的所有子元素。@attribute
:选择当前节点的指定属性。例如://@href
选择所有 href 属性。text()
:选择当前节点的文本内容。
- 逻辑运算符:
and
,or
,not
:用于组合多个条件。
- 轴(Axis):用于指定相对于当前节点的节点集合。
ancestor
,parent
,child
,following-sibling
,preceding-sibling
等。
- 通配符:
*
:匹配任何元素节点。@*
:匹配任何属性节点。
- 函数:
name()
:获取当前节点的名称。contains()
:检查一个字符串是否包含另一个字符串。text()
:获取当前节点的文本内容。
例如,以下是一些示例 XPath 表达式:
//div[@id='content']
:选择 id 属性为 ‘content’ 的所有 div 元素。//a[@href='https://example.com']
:选择所有 href 属性为 ‘https://example.com’ 的 a 元素。//div[@class='main']//p
:选择 class 属性为 ‘main’ 的 div 元素下的所有 p 元素
比如现在我需要定位用户名输入框,那么根据网页源码可以写Xpath表达式为: //input[@id='account_name']
然后再网页元素界面按下 Ctrl+F
会跳出查找框,输入你写好的的XPath表达式后按下回车
可以看到查询结果之后在搜索框右侧有 1 of 1
字样表示当前是符合表达的结果中的唯一一个,定位的位置和刚才查找的网页源码一致,说明是我们想要的结果。
对网页元素进行操作
下面是操作详解:
- 定位元素:为了在网页上进行任何操作,Selenium需要首先找到需要操作的元素。定位元素通常通过选择器来完成,如ID、class、tag name、name、link text、partial link text、css selector或XPath。例如,
driver.find_element_by_id("username")
会找到ID为username
的元素。 - 操作输入框:可以通过
send_keys
方法向输入框(通常是<input>
标签)发送输入,如用户名或密码。例如,username_field.send_keys("myusername")
。 - 点击按钮:使用
click()
方法可以点击按钮或链接。例如,submit_button.click()
会点击ID为submit_button
的按钮。 - 提交表单:通过点击
<form>
标签上的提交按钮,或者直接调用submit()
方法可以在表单提交时触发动作。例如,form.submit()
会提交表单。 - 获取和设置元素属性:可以通过
get_attribute()
方法获取元素的属性值,还可以利用set_attribute()
方法设置属性值。例如,element.get_attribute("class")
会获取元素的class
属性值。 - 执行JavaScript:Selenium提供了一个
execute_script()
方法,可以用来执行任何JavaScript代码。这意味着可以通过JavaScript与DOM交互来完成操作。 - 处理下拉框:可以使用
select_by_visible_text()
,select_by_index()
,select_by_value()
等方法来选择下拉框中的选项。这些方法位于Select
类中。例如,dropdown.select_by_visible_text("option2")
会选择下拉框中的可见文本为option2
的选项。 - 处理弹出框:Selenium提供了的方法来处理JavaScript警告、确认框和提示框。例如,
alert.accept()
会确认一个警告框。 - 切换窗口:当网页上打开新窗口时,Selenium提供的方法
switch_to.window
可以用来切换到另一个窗口或标签页。例如,`driver.switch_to.window
对于登录界面我们要做的是,输入用户名和密码然后按下登录按钮也就是用到了 send_keys()
和 click()
方法
但是网页中的某些元素被JavaScript或css限制不可见或者不可点击,那么无法使用使用 click()
,这时候需要通过execute_script()
来完成点击操作。
比如完整demo中的 driver.execute_script("arguments[0].click();", tar_a)
然后解释一下下面这段代码
tar_a = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//span[@class="save-all"]')))
WebDriverWait(driver, 5)
:WebDriverWait
是 Selenium 提供的等待方式,它会在指定的时间内等待某个条件成立后继续执行下面的代码。driver
是你创建的 WebDriver 实例,用于控制浏览器的操作。5
是最长等待时间,即最多等待5秒。
.until()
方法:until()
方法是WebDriverWait
的一个函数,它接受一个条件(Expected Condition,EC)作为参数,并且会不断地调用这个条件,直到返回True
或者超过最长等待时间为止。
EC.presence_of_element_located((By.XPATH, '//span[@class="save-all"]'))
:EC.presence_of_element_located
是预定义的一个条件,表示等待直到页面上至少出现一个满足条件的元素。(By.XPATH, '//span[@class="save-all"]')
是定位元素的方式,指定了使用 XPath 来找到页面上class
属性为"save-all"
的span
元素。
tar_a = ...
:- 最后将等待到的元素赋值给变量
tar_a
,这样就可以进一步操作这个元素了。
- 最后将等待到的元素赋值给变量
综上所述,这段代码的作用是等待页面中的一个 span
元素,该元素的 class
属性为 "save-all"
,等待时间最多为5秒。一旦找到该元素,就将它赋值给变量 tar_a
,以便后续对该元素进行操作,比如点击或者获取其文本内容等。
an[@class=“save-all”]')是定位元素的方式,指定了使用 XPath 来找到页面上
class属性为
"save-all"的
span元素。 4.
tar_a = …: - 最后将等待到的元素赋值给变量
tar_a`,这样就可以进一步操作这个元素了。
综上所述,这段代码的作用是等待页面中的一个 span
元素,该元素的 class
属性为 "save-all"
,等待时间最多为5秒。一旦找到该元素,就将它赋值给变量 tar_a
,以便后续对该元素进行操作,比如点击或者获取其文本内容等。
最后,对于网页验证这一步骤在这个示例中不涉及,可以从代码中启动网页,填写信息登录后获取手机验证码并填写,之后一段时间网站cookie会保留登录信息。
相关文章:
[Python自动化办公]--从网页登录网易邮箱进行邮件搜索并下载邮件附件
[Python自动化办公]–从网页登录网易邮箱进行邮件搜索并下载邮件附件 使用说明 本文使用Python的selenium库进行操作邮箱登录、固定名称搜索邮件并下载附件,Python版本:3.9.16, selenium版本:4.19.0,EdgeBrowser版本:126.0.2…...
mysql8多值索引
MySQL8新出了一个多值索引,我还没体验过呢,今天试一试。 建表 我先建个表试一试多值索引的效果。我粗略地看了下多值索引的介绍,发现是只适用于数组类型的。所以我建一个含有数组字段的表试一试。语法还是挺麻烦的: create tabl…...
MT3055 交换排列
1.思路 若数对为(1,4)和(4,7),则说明14可以互换,47可以互换,并且17也可以互换。所以把可以交换的元素放到一个集合中。 例如样例1:有三个集合,…...
Zkeys三方登录模块支持QQ、支付宝登录
1,覆盖到根目录,并导入update.sql数据库文件到Zkeys数据库里 2. 后台系统权限管理,配置管理员权限-系统类别-找到云外科技,全部打勾 3,后台系统设置找到云外快捷登录模块填写相应的插件授权配置和登录权限配置&#x…...
数字探秘:用神经网络解密MNIST数据集中的数字!
用神经网络解密MNIST数据集中的数字! 一. 介绍1.1 MNIST数据集简介1.2 MLP(多层感知器)模型介绍1.3 目标:使用MLP模型对MNIST数据集中的0-9数字进行分类 二.数据预处理2.1 数据集的获取与加载2.2 数据集的探索性分析(E…...
11个IT运维领域必考证书,每一个都含金量极高
这几年,网络方向里,IT运维其实还是挺吃香的。 运维人员的职责不仅仅是确保系统的正常运行,还需要应对突发事件、优化性能以及保障信息安全。 面对如此复杂的工作环境,拥有专业认证不仅是对自身技能的肯定,更是提升职业…...
VScode 常用插件
基础开发插件 Chinese (Simplified)(简体中文语言包):这是适用于VS Code的中文(简体)语言包,适用于英语不太流利的用户。Auto Rename Tag:这个插件可以同步修改HTML/XML标签,当用户修…...
299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源
299k stars利用Public APIs提升开发效率:探索APILayer提供的开源资源 在现代软件开发中,API(应用程序接口)是实现应用间通信和功能扩展的关键工具。公共API(Public APIs)则为开发者提供了宝贵的资源&#…...
在目标检测数据集上微调Florence-2
Florence-2是由微软开源的轻量级视觉-语言模型,采用MIT许可。该模型在任务如图像描述、目标检测、定位和分割中展示了强大的零样本和微调能力。 图1。图示展示了每个任务所表达的空间层次和语义细粒度水平。来源:Florence-2:推进多种视觉任务的统一表示。 该模型将图…...
AI提示词:AI辅导「数学作业」
辅导孩子作业对许多家长来说可能是一件头疼的事,但这部分工作可以在一定程度上交给AI来完成。 打开ChatGPT4,输入以下内容: # Role 数学辅导专家## Profile - author: 姜小尘 - version: 02 - LLM: Kimi - language: 中文 - description: 专门为小学生…...
odoo文档的安装
步骤 1: 安装必要的软件 确保你已经安装了Git和Python 3.6、3.7或3.8之一。 步骤 2: 克隆 Odoo 文档存储库 打开终端,然后使用Git克隆Odoo的文档存储库。 git clone https://github.com/odoo/documentation.git cd documentation步骤 3: 安装 Python 依赖项 …...
02STM32软件安装新建工程
STM32软件安装&新建工程 1.软件安装:1.1Keil5 MDK安装1.2安装器件支持包离线安装支持包在线安装支持包 1.3软件注册:1.4安装驱动STLINK驱动JLink驱动在此文件夹下USB转串口 2.新建工程2.1STM32开发方式:1.寄存器2.标准库3.HAL库 固件库压…...
社区6月月报 | Apache DolphinScheduler重要修复和优化记录
各位热爱Apache DolphinScheduler的小伙伴们,社区6月月报更新啦!这里将记录Apache DolphinScheduler社区每月的重要更新,欢迎关注。 月度Merge Stars 感谢以下小伙伴上个月为Apache DolphinScheduler所做的精彩贡献(排名不分先后…...
Docker 使用基础(2)—镜像
🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️💟──────── 4:20 🔄 ◀️ ⏸ …...
Docker学习笔记(三)Dockerfile
一、什么是Dockerfile Dockerfile 是一个用于自动化构建 Docker 镜像的文本文件,其中包含了从一个基础镜像开始,到最终形成所需定制镜像的所有指令集。这个文件中的每一条指令都对应着构建镜像过程中的一个步骤或一层,指导 Docker 如何安装软…...
学懂C#编程:C# 索引器(Indexer)的概念及用法
C#中的索引器(Indexer)是一种特殊的成员,它允许类或结构的实例像数组那样通过索引来访问其内部的数据。索引器提供了一种灵活的方式来暴露集合或数组类型的内部数据,使得客户端代码可以使用类似于数组下标的语法来访问类的成员&am…...
汇川CodeSysPLC教程03-2-14 与HMI通信
硬件连接 PLC与HMI连接采用何种连接方式,通常是参考双方支持哪些接口。PLC(可编程逻辑控制器)与HMI(人机界面)之间的通讯方式主要有以下几种: 串行通讯(Serial Communication)&…...
centos部署jar包
第一步: 将IDEA中的项目打包为jar,将这个jar文件放到centos服务器上的目录里,我在opt新建api目录,将jar文件放入,如下图: 第二步: 将需要读取的配置文件也放入此目录(其他目录也可以,和脚本中…...
CSS相对定位和绝对定位的区别
CSS相对定位和绝对定位的区别 区别1:相对的对象不同 相对定位是相对于自己绝对定位是相对于离自己最近的有定位的祖先 区别2:是否会脱离文档流 相对定位不会脱离文档流,不会影响其他元素的位置绝对定位会脱离文档流,会影响其他元素的布局 代…...
SpringCloud之nacos共享配置文件实现多数据源灵活切换
目录 前言 1.引入Springboot相关的aop切面依赖 2.创建自定义注解DataSourceKey 3.创建对ThreadLocal类 4.创建aop切面 5.创建动态数据源类 6.创建多数据库连接配置类 7.关键代码讲解 8.nacos主要配置 前言 通过Spring AOP(面向切面编程)的功能来动…...
原生小程序生成二维码方法之一
效果图: 第一步:下载对应的包并构建(工具---》构建npm) npm install weapp-qrcode --save 第二步:在wxml页面声明canvas <canvas style"width: 200px; height: 200px;margin:0 auto;" canvas-id"myQ…...
Kubernetes k8s Pod容器 探针 健康探测
目录 Pod容器健康探测 为什么要对容器做探测? 启动探测startupprobe 存活性探测livenessProbe 就绪性探测readinessProbe ReadinessProbe LivenessProbe startupProbe配合使用示例一般程序中需要设置三种探针结合使用,并且也要结合实际情况ÿ…...
Conformal low power-2.电源感知等效性检查
电源感知等效性检查 ■ 第24页:电源感知等效性检查概述 ■ 第24页:启动低功耗(等效性检查)软件 ■ 第25页:电源感知等效性检查流程 ■ 第28页:电源感知等效性检查示例Do文件 电源感知等效性检查概述…...
【密码学】从有限状态自动机到密钥流生成器
本文是对流密码内容的拓展,在流密码中种子密钥通过一个伪随机数生成器产生一个与明文等长的伪随机密钥流。而本文的内容就是在回答这样两个问题: 伪随机密钥流是如何生成的?流密码、流密钥生成器和有限状态自动机之间是什么关系?…...
3.相机标定原理及代码实现(opencv)
1.相机标定原理 相机参数的确定过程就叫做相机标定。 1.1 四大坐标系及关系 (1)像素坐标系(单位:像素(pixel)) 像素坐标系是指相机拍到的图片的坐标系,以图片的左上角为坐标原点&a…...
Centos7 安装Docker步骤及报错信息(不敢说最全,但是很全)
一、操作系统要求: 要安装Docker Engine,您需要CentOS 7及以上的维护版本。存档版本不受支持或测试。必须启用centos临时存储库。默认情况下,此存储库已启用,但如果已禁用,则需要重新启用它。建议使用overlay2存储驱动…...
【C语言】符号优先级详解
C语言符号优先级详细解析 在C语言中,不同的运算符具有不同的优先级和结合性,这决定了在表达式中运算符的计算顺序。理解这些优先级和结合性是正确编写和理解C语言程序的基础。本文将详细解析C语言中的符号优先级,包括各类运算符的优先级、结…...
天翼云高级运维工程师202407回忆题库 最新出炉
备考天翼云高级运维工程师 必须备考天翼云 之前觉得外企牛批 然后民企,拔地而起,民企也不错,工资高,有钱途 现在看来看去,还是国企好,体制内的,有保障,树大根深 有必要备考下天…...
在Python中什么是上下文管理器以及如何使用with语句来管理资源
什么是上下文管理器? 在Python中,上下文管理器(Context Manager)是一种支持with语句的协议,允许对象管理资源,如文件、线程锁的获取和释放、数据库连接等。上下文管理器负责资源的分配和释放,确…...
(四)、python程序--贪吃蛇游戏
一、绪论 贪吃蛇游戏。 已实现功能: 1、上下左右移动; 2、吃食物,随机生成食物; 3、碰撞检测,判断是否游戏结束。 二、代码分享 1、main.py import pygame import sys import food as c_food import snake as c…...
淘宝做的网站靠谱吗/网站建设是什么
当读取float文本出现缺失值时/做了一个没有意义的计算的时候(无穷大-无穷大or除以0)会出现nan。nan并不是一个数字,是一个float,含有nan的计算式得到的结果都是nan。nan并不是无穷的意思;正无穷:inf;负无穷:…...
成都网站制作报价/个人网站模板建站
一、什么是贝叶斯推断 贝叶斯推断(Bayesian inference)是一种统计学方法,用来估计统计量的某种性质。 它是贝叶斯定理(Bayes theorem)的应用。英国数学家托马斯贝叶斯(Thomas Bayes)在1763年发表…...
wordpress 投稿页面/刷网站关键词工具
样式wxss中使用css课程-文本-word-break 微信小程序交流群:111733917 | 微信小程序从0基础到就业的课程:https://edu.csdn.net/topic/huangjuhua 基础用法 word-break 属性规定自动换行的处理方法。通过使用 word-break 属性,可以让浏览器实…...
建设部指定招标网站/站长之家ip地址查询
上一篇ESFramework扩展之EsfP2P -- 基于ESFramework的P2P实现 主要介绍了EsfP2P如何协助建立P2P Session,那只是整个故事的一半,EsfP2P主要职能的另一半是确保P2P消息的可靠传递。我们已经知道,目前的EsfP2P扩展的实现…...
国外色情网站app/谷歌关键词查询工具
更快的优化器 动量优化 梯度下降通过直接减去权重的成本函数J(θ)J(\theta)J(θ)的梯度乘以学习率(ΔθJ(θ)\Delta _{\theta}J(\theta)ΔθJ(θ))来更新权重 θ\thetaθ。它不关系较早的梯度是什么。动量优化:在每次迭代时,它…...
北京网站设计定制开发建设公司/域名注册平台有哪些
一、登录阿里云, 找到对象存储oss 二、创建Bucket 三、获取操作oss的4个配置 地域节点 AccessKey ID 和 AccessKey Secret Bucket名称...