当前位置: 首页 > news >正文

selenium知识点大全

selenium知识点大全

在使用selenium之前必须先配置浏览器对应版本的webdriver。

1. 初始化浏览器对象

from selenium.webdriver import Chrome# 创建浏览器对象,并且打开一个空的页面
browser = Chrome()# 关闭浏览器
browser.close()

2. 访问指定网页

from selenium import webdriver# 初始化浏览器为chrome浏览器
browser = webdriver.Chrome()# 访问百度首页
browser.get(r'https://www.baidu.com/')# 浏览器截图
browser.get_screenshot_as_file('截图.png')# 关闭浏览器
browser.close()

3. 设置浏览器大小

from selenium import webdriver
import timebrowser = webdriver.Chrome()# 设置浏览器大小:全屏
browser.maximize_window()
browser.get(r'https://www.baidu.com')
time.sleep(2)# 设置分辨率 500*500
browser.set_window_size(500, 500)
time.sleep(2)# 设置分辨率 1000*800
browser.set_window_size(1000, 800)
time.sleep(2)# 关闭浏览器
browser.close()

4. 刷新页面

from selenium import webdriver
import time  browser = webdriver.Chrome()# 设置浏览器全屏
browser.maximize_window()   
browser.get(r'https://www.baidu.com')  
time.sleep(2)try:# 刷新页面browser.refresh()  print('刷新页面')
except Exception as e:print('刷新失败')# 关闭浏览器
browser.close()

5. 前进和后退

from selenium import webdriver
import time  browser = webdriver.Chrome()# 设置浏览器全屏
browser.maximize_window()   
browser.get(r'https://www.baidu.com')  
time.sleep(2)# 打开淘宝页面
browser.get(r'https://www.taobao.com')  
time.sleep(2)# 后退到百度页面
browser.back()  
time.sleep(2)# 前进到淘宝页面
browser.forward() 
time.sleep(2)# 关闭浏览器
browser.close()

6. 获取页面基本属性

from selenium import webdriverbrowser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')# 网页标题
print(browser.title)
# 当前网址
print(browser.current_url)
# 浏览器名称
print(browser.name)
# 网页源码
print(browser.page_source)

7. 定位标签

browser.find_element(By.ID,'kw')
browser.find_element(By.NAME,'wd')
browser.find_element(By.CLASS_NAME,'s_ipt')
browser.find_element(By.TAG_NAME,'input')
browser.find_element(By.LINK_TEXT,'新闻')
browser.find_element(By.PARTIAL_LINK_TEXT,'闻')
browser.find_element(By.XPATH,'//*[@id="kw"]')
browser.find_element(By.CSS_SELECTOR,'#kw')

8. get_attribute获取标签属性

from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get(r'https://www.baidu.com')# 通过class属性值获取标签
logo = browser.find_element(By.CLASS_NAME,'index-logo-src')
print(logo)# 获取标签的src属性
print(logo.get_attribute('src'))# 关闭浏览器
browser.close()

9. 获取标签内容

from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get(r'https://www.baidu.com')# 通过css选择器选中标签
logo = browser.find_element(By.CSS_SELECTOR, '#hotsearch-content-wrapper > li:nth-child(1) > a')
# 获取标签的标签内容
print(logo.text)
# 获取标签的href属性
print(logo.get_attribute('href'))# 关闭浏览器
browser.close()

10. 获取其他属性

除了属性和文本值外,还有id、位置、标签名和大小等属性。

from selenium import webdriver
from selenium.webdriver.common.by import Bybrowser = webdriver.Chrome()browser.get(r'https://www.baidu.com')logo = browser.find_element(By.CLASS_NAME, 'index-logo-src')
# 获取标签的id
print(logo.id)
# 获取标签的位置
print(logo.location)
# 获取标签的标签名
print(logo.tag_name)
# 获取标签的大小
print(logo.size)# 关闭浏览器
browser.close()

11. 页面交互操作

  1. 输入文本:标签.send_keys(输入内容)

  2. 点击:标签.click()

  3. 清空输入框:标签.clear()

  4. 回车确认:标签.submit()

  5. 单选:单选比较好操作,先定位需要单选的某个元素,然后点击一下即可。

  6. 多选:多选好像也比较容易,依次定位需要选择的元素,点击即可。

  7. 下拉框:下拉框的操作相对复杂一些,需要用到Select模块。

    我们来进行演示一波,由于暂时没找到合适的网页,我这边写了一个简单的网页本地测试(文件存为 demo.html)

    <html><body><form>
    <select name="帅哥"><option value="才哥">才哥</option><option value="小明" selected="">小明</option><option value="小华">小华</option><option value="草儿">小草</option>
    </select>
    </form></body>
    </html>
    

    然后,再演示下拉框的不同选择的方式

    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    from selenium.webdriver.common.by import By
    import timeurl = 'file:///Users/yuting/Work/%E6%8E%88%E8%AF%BE/Python2206/01%E8%87%AA%E5%8A%A8%E5%8A%9E%E5%85%AC/day11-turtle%E7%9A%84%E4%BD%BF%E7%94%A8/demo.html'browser = webdriver.Chrome()browser.get(url)
    time.sleep(2)# 获取下来列表对应的标签
    select_tag = browser.find_element(By.NAME, "帅哥")# 根据索引选择
    Select(select_tag).select_by_index("2")
    time.sleep(2)
    # 根据value值选择
    Select(select_tag).select_by_value("草儿")
    time.sleep(2)
    # 根据文本值选择
    Select(select_tag).select_by_visible_text("才哥")
    time.sleep(2)# 关闭浏览器
    browser.close()
    

12. 选项卡切换

我们在访问网页的时候会打开很多个页面,在Selenium中提供了一些方法方便我们对这些页面进行操作。

current_window_handle:获取当前窗口的句柄。

window_handles:返回当前浏览器的所有窗口的句柄。

switch_to_window():用于切换到对应的窗口。

from selenium import webdriver
import timebrowser = webdriver.Chrome()# 打开百度
browser.get('http://www.baidu.com')
# 新建一个选项卡
browser.execute_script('window.open()')
print(browser.window_handles)
# 跳转到第二个选项卡并打开知乎
browser.switch_to.window(browser.window_handles[1])
browser.get('http://www.zhihu.com')
# 回到第一个选项卡并打开淘宝(原来的百度页面改为了淘宝)
time.sleep(2)
browser.switch_to.window(browser.window_handles[0])
browser.get('http://www.taobao.com')

13. 模拟鼠标操作

既然是模拟浏览器操作,自然也就需要能模拟鼠标的一些操作了,这里需要导入ActionChains 类。

from selenium.webdriver.common.action_chains import ActionChains

13.1 左键

这个其实就是页面交互操作中的点击click()操作。

13.2 右键:

context_click()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
import timebrowser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')
time.sleep(2)# 定位到要右击的元素,这里选的新闻链接
right_click = browser.find_element(By.LINK_TEXT, '新闻')# 执行鼠标右键操作
ActionChains(browser).context_click(right_click).perform()
time.sleep(2)# 关闭浏览器
browser.close()

在上述操作中:

ActionChains(browser):调用ActionChains()类,并将浏览器驱动browser作为参数传入

context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数

perform():执行ActionChains()中储存的所有操作,可以看做是执行之前一系列的操作

13.3 双击:double_click()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
import timebrowser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')
time.sleep(2)# 定位到要双击的元素
double_click = browser.find_element(By.CSS_SELECTOR, '.accessibility-icon')# 双击
ActionChains(browser).double_click(double_click).perform()
time.sleep(15)# 关闭浏览器
browser.close()

13.4 拖拽

drag_and_drop(source,target)拖拽操作,开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。

我们以菜鸟教程的一个案例来进行演示:

https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
import timebrowser = webdriver.Chrome()
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
time.sleep(2)browser.switch_to.frame('iframeResult')# 开始位置
source = browser.find_element(By.CSS_SELECTOR, "#draggable")# 结束位置
target = browser.find_element(By.CSS_SELECTOR, "#droppable")# 执行元素的拖放操作
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform()
# 拖拽
time.sleep(15)# 关闭浏览器
browser.close()

13.5 悬停:

move_to_element()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
import timebrowser = webdriver.Chrome()
url = 'https://www.baidu.com'
browser.get(url)
time.sleep(2)# 定位悬停的位置
move = browser.find_element(By.ID, "s-usersetting-top")# 悬停操作
ActionChains(browser).move_to_element(move).perform()
time.sleep(5)# 关闭浏览器
browser.close()

14. 模拟键盘操作

selenium中的Keys()类提供了大部分的键盘操作方法,通过send_keys()方法来模拟键盘上的按键。

引入Keys

from selenium.webdriver.common.keys import Keys

send_keys(Keys.BACK_SPACE):删除键(BackSpace)

send_keys(Keys.SPACE):空格键(Space)

send_keys(Keys.TAB):制表键(TAB)

send_keys(Keys.ESCAPE):回退键(ESCAPE)

send_keys(Keys.ENTER):回车键(ENTER)

send_keys(Keys.CONTRL,‘a’):全选(Ctrl+A)

send_keys(Keys.CONTRL,‘c’):复制(Ctrl+C)

send_keys(Keys.CONTRL,‘x’):剪切(Ctrl+X)

send_keys(Keys.CONTRL,‘v’):粘贴(Ctrl+V)

send_keys(Keys.F1):键盘F1

send_keys(Keys.F12):键盘F12

相关文章:

selenium知识点大全

selenium知识点大全 在使用selenium之前必须先配置浏览器对应版本的webdriver。 1. 初始化浏览器对象 from selenium.webdriver import Chrome# 创建浏览器对象&#xff0c;并且打开一个空的页面 browser Chrome()# 关闭浏览器 browser.close()2. 访问指定网页 from selen…...

Biotin-PEG-SH生物素-聚乙二醇-巯基结构式;SH-PEG-Biotin

Biotin-PEG-SH 生物素-聚乙二醇-巯基 中文名称&#xff1a;生物素-聚乙二醇-巯基 英文名称&#xff1a;Biotin-PEG-SH Biotin-PEG-Thiol 性状&#xff1a;粘稠液体或者固体粉末&#xff0c;取决于分子量 溶剂&#xff1a;溶于水和DCM、DMF等大部分有机溶剂 分子式&#x…...

【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析

简介 手机在网状态 API 支持传入手机号码&#xff0c;查询手机号在网状态&#xff0c;返回在网、在网不可用、不在网&#xff08;销号/未启用/停机&#xff09;等多种状态&#xff0c;查询手机号在网状态之后&#xff0c;可以根据具体的业务需求来进行不同的处理。 本文主要介…...

Python json 数据提取 jsonpath 详解

一、JsonPath JsonPath 是一种信息抽取类库&#xff0c;是从JSON文档中抽取指定信息的工具&#xff0c;提供多种语言实现版本&#xff0c;包括&#xff1a;Javascript, Python&#xff0c; PHP 和 Java。也就是独立的可以配合多种语言进行匹配的目标值的一种类库&#xff0c;和…...

TCP和UDP的区别以及应用场景

区别 首先UDP协议非常简单&#xff0c;头部只有8个字节&#xff1a; 校验和为了提供可靠的UDP首部和数据而设计&#xff0c;防止收到在网络传输中受损的UDP包。 再对比下TCP协议&#xff1a; 传输层有两个传输协议分别是 TCP 和 UDP&#xff0c;在内核中是两个完全独立的软件…...

高铁轮毂表面缺陷的<视觉显著性>超像素图像检测方法

内容:提出一种基于视觉显著性注意机制的超像素自适应检测方法&#xff1b; 设计视觉显著性注意机制滤波器用于粗略定位出缺陷空间范围&#xff0c;结合超像素分块图像分割方法消除光照不均匀引起的噪声干扰&#xff0c;有效地完成缺陷区域的边界分割和实时特征提取&…...

纺织工业库房如何有效防潮?恒温恒湿真的有效吗?

纺织工业库房中的设备或存放的货物对温度或湿度的变化又非常敏感&#xff0c;温度或湿度的波动可能会产生一些问题。 针对库房环境温湿度的监测&#xff0c;若采用人工检测的方式&#xff0c;很难管控精准且工作效率低&#xff1b;其次&#xff0c;人工综合成本高。那么该如何实…...

SDK之动态链接库开发—基本概念

动态链接库&#xff08;Dynamic Link Library&#xff0c;简称 DLL&#xff09;是一种在运行时加载的库&#xff0c;可用于在多个应用程序之间共享代码和数据。与静态链接库相比&#xff0c;动态链接库的主要优劣势如下&#xff1a; 优势&#xff1a; 空间效率更高&#xff0…...

spring生命周期、IOC工作流程、AOP过程,循环依赖、BeanFactory和FactoryBean

1、生命周期 划分为5个阶段&#xff1a; 创建前准备阶段、创建实例阶段、 依赖注入阶段、 容器缓存阶段、销毁实例阶段。一、创建前准备阶段&#xff1a;这个阶段主要的作用是&#xff0c;Bean 在开始加载之前&#xff0c;需要从上下文和相关配置中解 析并查找 Bean 有关的扩展…...

小黑子—Java从入门到入土过程:第六章

Java零基础入门6.0Java系列第六章1. 面向对象综合练习1.1 文字版格斗游戏参数占位&#xff0c;格式化输出回顾关于printf和print和println的区别1.2 对象数组练习1.2.1 练习一1.2.2 练习二1.2.3 练习三1.2.4 练习四1.3 键盘录入回顾1.4 复杂对象数组练习1.4.1 复杂练习一1.4.2 …...

python实战应用讲解-【numpy数组篇】常用函数(二)(附python示例代码)

目录 Python numpy.flipud() Python numpy.insert() Python numpy.ravel() Python numpy.shapes() Python numpy.roll() Python numpy.rot90() Python numpy.append() Python numpy.flipud() Python numpy.flipud()函数将数组(每列中的项)按上下方向翻转,但保留形状。…...

windows10 java 创建合约

a. 安装Nodejs 主要是方便使用npm 命令 并配置环境变量 b.使用 npm 可以便捷地安装Solidity编译器solcjs npm install -g solc c.找个目录 创建一个solidity文件 如 // SPDX-License-Identifier: GPL-3.0pragma solidity >0.8.2 <0.9.0;/*** title Storage* dev Store…...

阿里巴巴获得商品详情 API调用示例

为了进行此平台API的调用&#xff0c;首先我们需要做下面几件事情。 1、 获取一个KEY。 2、 参考API文档里的接入方式和示例。 3、查看测试工具是否有需要的接口&#xff0c;响应实例的返回字段是否符合参数要求。 4、利用平台的文档中心和API测试工具&#xff0c;对接口进…...

企业工程管理系统源码-数字化可视化项目管理平台

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…...

【C语言】一文带你简单了解C语言

这里写目录标题&#xff09;引言C语言概述基础语法数据类型运算符循环语句分支语句函数数组指针文件操作内存管理高级特性结构体枚举类型联合体预处理器应用场景操作系统编译器游戏开发嵌入式系统引言 C语言是一种通用的计算机编程语言&#xff0c;具有高效、灵活、可移植等特点…...

LeetCode 589 LeetCode590 N叉树的前序遍历和后序遍历

题目&#xff1a; N叉树的前序遍历&#xff1a;给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔。 示例 1&#xff1a; 输入&#xff1a;root [1,null,3,2,4,null,5,…...

为什么CAD多段线没有面积属性或数值不对?快看过来!

有些设计师小伙伴在CAD制图过程中&#xff0c;会遇到这样的一个问题&#xff1a;在CAD图纸中直接选取线条后用工具标出来的面积是实际面积的两倍&#xff0c;而且用CAD面积查询命令直接选择对象查不出面积&#xff0c;这是为什么呢&#xff1f;本文就和小编来给大家分享一下CAD…...

WRF后处理:使用ncl脚本批量提取wrfout变量并输出/Shell 入门:Shell进入不同文件夹执行脚本

目录背景思路NCL提取wrfout特定变量Shell批量执行背景 在之前的博客WRF后处理总结我提到过将NCL与python结合进行后处理的问题&#xff0c;即&#xff0c;使用NCL进行wrfout变量的提取、计算、输出&#xff0c;再用已有python脚本绘图&#xff0c;这样可以极大节省时间。 对于…...

Consul在Windows系统下的安装与启动

1、Consul的简介 Consul 是由 HashiCorp 公司推出的一款开源工具&#xff0c;用于实现分布式系统的服务发现与服务配置。它内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key-Value 存储、多数据中心方案。 Consul 使用 GO 语言编写&#xff0c;因此天然具有可移…...

2022国赛16:神州路由器交换机BGP配置实例1

实验拓扑图 一、基本配置: R1配置: Router>ena Router#conf Router_config#host R1 R1_config#int g0/0 R1_config_g0/0#ip add 202.11.1.1 255.255.255.252 R1_config_g0/0#int l0 R1_config_l0#ip add 1.1.1.1 255.255.255.255 R1_confi...

PaddlePaddle NLP学习笔记1 词向量

文章目录1.语言模型 Language Model1.1 语言模型是什么1.2 语言模型计算什么1.3 n-gram Language Model2.神经网络语言模型NNLM2.1 N-gram模型的问题3. 词向量3.1 词向量(word Embedding)word2vec 词向量训练算法3.2 如何把词转换为词向量&#xff1f;3.3如何让向量具有语义信息…...

无重复全排列 [2*+]

目录 无重复全排列 [2*+] 程序设计 程序分析 无重复全排列 [2*+] 输出N个数的无重复全排列 Input 输入一个数值N 1<=N=50 Output 输出N个数的无重复全排列,每个数之间用空格隔开 最后一行输出无重复全排列的个数。 Sample Input 3 Sample Output 1 2...

【血泪建议】软件测试岗位现状,可惜之前没人告诉我,肠子都晦青了....

谈到现状&#xff0c;国内的软件测试行情目前呈现了两极分化的极端情况。 一个是早期的手工测试人员吐槽工作不好做&#xff0c;即使有工作也是外包&#xff0c;而且薪资太低&#xff1b;一方面是很多互联网企业感叹自动化测试人才难找&#xff0c;有技术的自动化测试工程师&a…...

Elastic(ELK) Stack 架构师成长路径

Elastic Stack&#xff08;ELK Stack&#xff09;是一个开源的日志分析平台&#xff0c;由 Elasticsearch、Logstash 和 Kibana 三个组件组成&#xff0c;主要用于数据搜索、分析和可视化。要成为一名 ELK Stack 架构师&#xff0c;需要遵循一定的成长路径&#xff0c;以便逐步…...

Netty的高性能体现在哪些方面

文章目录Netty的高性能体现在哪些方面1. 非阻塞I/O2. 零拷贝3. 内存池4. 线程模型Netty的高性能体现在哪些方面 Netty是一个高性能、异步事件驱动的网络应用程序框架&#xff0c;它具有出色的稳定性和灵活性。在现代的分布式系统和互联网应用中&#xff0c;Netty已经成为构建高…...

CompletableFuture详解

1、概述 咱们都知道可以通过继承Thread类或者实现Runnable接口两种方式实现多线程。但是有时候我们希望得到多线程异步任务执行后的结果&#xff0c;也就是异步任务执行后有返回值&#xff0c;Thread和Runnable是不能实现的。当我们需要返回值的时候怎么办呢&#xff1f; Java…...

(学习日记)2023.3.10

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…...

【图像分割】Meta分割一切(SAM)模型环境配置和使用教程

注意&#xff1a;python>3.8, pytorch>1.7,torchvision>0.8 Feel free to ask any question. 遇到问题欢迎评论区讨论. 官方教程&#xff1a; https://github.com/facebookresearch/segment-anything 1 环境配置 1.1 安装主要库&#xff1a; &#xff08;1&…...

AJ入门路线

一.AspectJ 入门 概述安装示例代码切入点表达式thisJoinPointStaticPart 和 thisJoinPoint与Spring 切面写法的对比总结 初步了解了aspectJ的使用&#xff0c;我们可以了解以下几点&#xff1a; 1&#xff09;aspectJ的使用是在编译期&#xff0c;通过特殊的编译器可以在不改变…...

多商户商城小程序源码开发需具备哪些功能?

随着电商的进一步发展&#xff0c;传统企业为了更好的占领市场也纷纷向电商市场迈进&#xff0c;着手打造属于自己的商城系统。多商户商城系统是一种多商户、多商品、多支付的电子商务平台&#xff0c;功能丰富&#xff0c;涵盖多个行业&#xff0c;能够满足多种商家和用户的需…...

顺德网站开发/西安百度seo推广电话

OpenCV中常见的与图像操作有关的数据容器有Mat&#xff0c;cvMat和IplImage。 一、Mat类型&#xff1a;矩阵类型&#xff0c;Matrix。 在openCV中&#xff0c;Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。 Mat有3个重要的方法&…...

中山顺的网站建设/网站快照优化公司

8皇后问题&#xff08;改编&#xff09; 问题描述规则同8皇后问题&#xff0c;但是棋盘上每格都有一个数字&#xff0c;要求八皇后所在格子数字之和最大。输入格式一个8*8的棋盘。输出格式所能得到的最大数字和样例输入1 2 3 4 5 6 7 89 10 11 12 13 14 15 1617 18 19 20 21 22…...

温州有没有做鞋的网站/北京seo排名方法

docker 部署 ES集群 1. 安装docker 在/opt/software 目录下新建docker目录&#xff0c;上传docker_build.sh脚本并执行 sh docker_build.sh#!/bin/bash yum -y install gcc yum -y install gcc-c ##验证gcc版本 gcc -v##卸载老版本 yum remove docker docker-client docker-…...

深圳市住房和建设局网站变更/谷歌竞价广告

Django Web应用程序&#xff08;3&#xff09; 本文主要内容为对项目“学习笔记”设置样式并对其进行部署。 为设置样式&#xff0c;将使用Bootstrap库&#xff1b;另外&#xff0c;我们还将把项目部署到Heroku&#xff0c;这个网站能够让我们能够将项目推送到其服务器&#x…...

石景山区城乡建设委员会网站/百度网站是什么

好消息&#xff1a; 近日&#xff0c;拉勾招聘数据研究院对程序员群体开展深度调研后&#xff0c;发布了一份《2022程序员群体职场洞察报告》&#xff08;以下简称报告&#xff09;&#xff0c;对当下程序员群体职场生存状态、薪资水平和职场选择等方面给出了数据参考。 近8成…...

网站中文域名/软文代发布

题意 N个客户&#xff0c;外卖员需要将外卖送给N个客户。0代表外卖店&#xff0c;1-N代表客户地址。矩阵i,j代表从i到j所需时间。求送完所有外卖最少所需时间。 题解 先使用Flyod算法求出任意两点间最短路&#xff08;数据量很小&#xff0c;Flyod很轻松&#xff09;。然后d…...