您的位置:首页 > 游戏 > 手游 > 工程师招聘网站_c2c的网站名称和网址_青岛网站建设培训学校_他达拉非片正确服用方法

工程师招聘网站_c2c的网站名称和网址_青岛网站建设培训学校_他达拉非片正确服用方法

2024/12/23 6:41:19 来源:https://blog.csdn.net/chenchihwen/article/details/144158266  浏览:    关键词:工程师招聘网站_c2c的网站名称和网址_青岛网站建设培训学校_他达拉非片正确服用方法
工程师招聘网站_c2c的网站名称和网址_青岛网站建设培训学校_他达拉非片正确服用方法

透过python 使用 edge 执行自动化时,原来的代码 出现报错了

执行报错啦:message info 如下显示 HTTPSConnectionPool(host='msedgedriver.azureedge.net', port=443): Max retries exceeded with url: /130.0.2849/edgedriver_win64.zip (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000020BBB749250>: Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。'))

因为 这个网站已经不再为何 对照关系,新的edge 版本就会报错

代码修正如下

根据 edge版本号 直接引用 Microsoft 的 dirver 网页

这段代码首先通过winreg模块获取 Edge 浏览器的版本号,然后根据版本号拼凑出下载edgedriver_win64.zip的链接并下载该文件,最后将下载的文件解压到指定的文件夹(这里是当前目录下的EdgeDriver文件夹)。请注意,代码中的路径假设和正则表达式匹配是基于给定的网页结构,如果网页结构发生变化,可能需要相应调整代码。

import requests
import re
import zipfile
import os
import winregdef get_edge_version():"""获取Edge浏览器版本号"""try:key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Edge\BLBeacon")value, _ = winreg.QueryValueEx(key, "version")winreg.CloseKey(key)return valueexcept FileNotFoundError:print("未找到Edge浏览器安装信息。")return Nonedef download_edge_driver(version):"""根据版本号下载edgedriver_win64.zip"""base_url = "https://msedgewebdriverstorage.z22.web.core.windows.net/?prefix={}/".format(version)response = requests.get(base_url)if response.status_code == 200:html_content = response.text# 使用正则表达式匹配edgedriver_win64.zip的下载链接match = re.search(r'href="([^"]*edgedriver_win64.zip)"', html_content)if match:download_url = "https://msedgewebdriverstorage.z22.web.core.windows.net/" + match.group(1)print("下载链接:", download_url)download_path = "edgedriver_win64.zip"with requests.get(download_url, stream=True) as r:r.raise_for_status()with open(download_path, 'wb') as f:for chunk in r.iter_content(chunk_size=8192):f.write(chunk)print("下载完成。")return download_pathelse:print("未找到edgedriver_win64.zip的下载链接。")else:print("获取版本页面失败,状态码:", response.status_code)return Nonedef unzip_file(zip_path, extract_path):"""解压下载的压缩文件"""with zipfile.ZipFile(zip_path, 'r') as zip_ref:zip_ref.extractall(extract_path)print("解压完成。")if __name__ == "__main__":edge_version = get_edge_version()if edge_version:downloaded_file = download_edge_driver(edge_version)if downloaded_file:# 假设解压到当前目录下的EdgeDriver文件夹中extract_folder = os.path.join(os.getcwd(), "EdgeDriver")os.makedirs(extract_folder, exist_ok=True)unzip_file(downloaded_file, extract_folder)

以下是对上述代码的逐行详细说明:

import requests
import re
import zipfile
import os
import winreg

  • 导入了必要的 Python 库。requests用于发送 HTTP 请求来获取网页内容和下载文件;re用于使用正则表达式进行字符串匹配;zipfile用于处理 ZIP 压缩文件;os用于操作系统相关的操作,如创建文件夹;winreg用于读取 Windows 注册表信息,这里用于获取 Edge 浏览器的版本号。

def get_edge_version():"""获取Edge浏览器版本号"""try:key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Edge\BLBeacon")

  • 定义了一个函数get_edge_version,用于获取 Edge 浏览器的版本号。首先尝试打开 Windows 注册表中存储 Edge 浏览器相关信息的键。这里的winreg.HKEY_CURRENT_USER表示当前用户的注册表根键,r"Software\Microsoft\Edge\BLBeacon"是 Edge 浏览器版本信息在注册表中的路径。

value, _ = winreg.QueryValueEx(key, "version")

  • 使用winreg.QueryValueEx函数从打开的注册表键中查询名为version的值,这个值就是 Edge 浏览器的版本号。查询结果返回一个包含值和类型的元组,这里使用_忽略类型信息,只获取版本号的值。

winreg.CloseKey(key)
return value

  • 关闭打开的注册表键,以释放系统资源。然后返回获取到的 Edge 浏览器版本号。

except FileNotFoundError:print("未找到Edge浏览器安装信息。")return None

  • 如果在尝试打开注册表键时发生FileNotFoundError异常,说明没有找到 Edge 浏览器的安装信息,打印相应提示信息并返回None

def download_edge_driver(version):"""根据版本号下载edgedriver_win64.zip"""base_url = "https://msedgewebdriverstorage.z22.web.core.windows.net/?prefix={}/".format(version)

  • 定义了函数download_edge_driver,用于根据给定的版本号下载edgedriver_win64.zip文件。首先根据版本号拼凑出下载页面的基础 URL,用于后续获取下载链接。

response = requests.get(base_url)

  • 使用requests.get函数发送 HTTP GET 请求到下载页面的 URL,获取页面内容。

if response.status_code == 200:html_content = response.text

  • 检查响应的状态码是否为200,表示请求成功。如果成功,获取响应的文本内容(即下载页面的 HTML 代码)。

# 使用正则表达式匹配edgedriver_win64.zip的下载链接
match = re.search(r'href="([^"]*edgedriver_win64.zip)"', html_content)

  • 使用正则表达式在 HTML 内容中搜索edgedriver_win64.zip的下载链接。正则表达式r'href="([^"]*edgedriver_win64.zip)"的含义是查找以href="开头,接着是任意字符([^"]*)直到edgedriver_win64.zip,最后以"结尾的字符串,并捕获其中的下载链接部分(括号内的内容)。

if match:download_url = "https://msedgewebdriverstorage.z22.web.core.windows.net/" + match.group(1)

  • 如果找到了匹配的下载链接,将基础 URL 和匹配到的相对链接部分组合成完整的下载 URL。

print("下载链接:", download_url)
download_path = "edgedriver_win64.zip"

  • 打印出下载链接,并指定下载文件的本地路径为edgedriver_win64.zip,即在当前工作目录下保存下载的文件。

with requests.get(download_url, stream=True) as r:r.raise_for_status()

  • 使用requests.get再次发送请求,这次是下载文件,并且设置stream=True以便分块读取响应内容。同时检查下载请求的状态码,如果不是200,则抛出异常。

with open(download_path, 'wb') as f:for chunk in r.iter_content(chunk_size=8192):f.write(chunk)

  • 打开本地文件(以二进制写入模式wb),然后循环读取下载请求的响应内容(每次读取8192字节),并将其写入本地文件,实现文件的下载。

print("下载完成。")
return download_path

  • 打印下载完成的提示信息,并返回下载文件的本地路径。

else:print("未找到edgedriver_win64.zip的下载链接。")

  • 如果在 HTML 内容中没有找到匹配的下载链接,打印相应提示信息。

else:print("获取版本页面失败,状态码:", response.status_code)
return None

  • 如果最初获取下载页面的请求失败(状态码不是200),打印状态码并返回None

def unzip_file(zip_path, extract_path):"""解压下载的压缩文件"""with zipfile.ZipFile(zip_path, 'r') as zip_ref:

  • 定义函数unzip_file用于解压下载的 ZIP 压缩文件。首先使用zipfile.ZipFile打开指定路径的 ZIP 文件,以只读模式r

zip_ref.extractall(extract_path)

  • 使用extractall方法将 ZIP 文件中的所有内容解压到指定的目标文件夹。

print("解压完成。")

  • 打印解压完成的提示信息。

if __name__ == "__main__":

  • 这是 Python 脚本的主入口点,只有当脚本直接运行时(而不是被导入为模块时),以下代码才会执行。

edge_version = get_edge_version()

  • 调用get_edge_version函数获取 Edge 浏览器的版本号。

if edge_version:

  • 检查获取到的版本号是否不为None,如果不为None,表示成功获取到版本号,继续执行下载和解压操作。

downloaded_file = download_edge_driver(edge_version)

  • 根据获取到的版本号调用download_edge_driver函数下载edgedriver_win64.zip文件,并获取下载文件的本地路径。

if downloaded_file:

  • 检查下载文件的路径是否不为None,如果不为None,表示下载成功,继续执行解压操作。

# 假设解压到当前目录下的EdgeDriver文件夹中
extract_folder = os.path.join(os.getcwd(), "EdgeDriver")

  • 使用os.path.join函数构建解压目标文件夹的路径,这里假设解压到当前工作目录下的EdgeDriver文件夹中。os.getcwd获取当前工作目录。

os.makedirs(extract_folder, exist_ok=True)

  • 使用os.makedirs创建解压目标文件夹,如果文件夹已经存在(exist_ok=True表示如果文件夹存在则不抛出异常)。

unzip_file(downloaded_file, extract_folder)

  • 调用unzip_file函数,将下载的文件解压到指定的目标文件夹中。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com