python selenium下载一个合适的chromedriver.exe(稳定版本)

这篇具有很好参考价值的文章主要介绍了python selenium下载一个合适的chromedriver.exe(稳定版本)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

可以使用该脚本来进行下载:
下载前需要安装如下的依赖

requests==2.27.1
selenium==4.14.0
webdriver_manager==4.0.1

下载脚本代码:

import json
import subprocess
import shutil
import os
import time
import zipfile

import requests
from webdriver_manager.core.os_manager import OperationSystemManager
from webdriver_manager.chrome import ChromeDriverManager, ChromeType

__all__ = {
    'download_suit_chrome_driver'
}

# 记录固定数据
chrome_json_file = 'chrome_version.json'
chrome_zip = 'chrome_driver.zip'


def format_float(num):
    return '{:.2f}'.format(num)


def download_file(name, url):
    '''
    :param name:下载保存的名称
    :param url: 下载链接
    :return:
    '''
    headers = {'Proxy-Connection': 'keep-alive'}
    r = requests.get(url, stream=True, headers=headers)
    length = float(r.headers['content-length'])
    f = open(name, 'wb')
    count = 0
    count_tmp = 0
    time1 = time.time()
    for chunk in r.iter_content(chunk_size=512):
        if chunk:
            f.write(chunk)
            count += len(chunk)
            if time.time() - time1 > 2:
                p = count / length * 100
                speed = (count - count_tmp) / 1024 / 1024 / 2
                count_tmp = count
                print(name + ': ' + format_float(p) + '%' + ' Speed: ' + format_float(speed) + 'M/S')
                time1 = time.time()
    f.close()


def install_chrome_driver():
    """
    安装chrome浏览器
    """
    try:
        p = ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()
        os.environ['CHROME_DRIVER_PATH'] = p
    except Exception as e:
        print("error")


def get_chromedriver_version(chromedriver_path="chromedriver.exe"):
    """
    获取chrome_driver版本
    Args:
        chromedriver_path:

    Returns:

    """
    try:
        # 运行Chromedriver,并通过命令行参数获取版本信息
        result = subprocess.run([chromedriver_path, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

        if result.returncode == 0:
            # 如果成功执行,解析版本信息
            version = result.stdout.strip()
            version_list = str(version).split(" ")
            if len(version_list) == 3:
                version = version_list[1]
            return True, version
        else:
            # 如果执行失败,输出错误信息
            error_message = result.stderr.strip()
            return False, f"Error: {error_message}"
    except Exception as e:
        return False, f"An error occurred: {str(e)}"


def get_chrome_version():
    """
    获取chrome版本
    Returns:
    """
    try:
        os_version = OperationSystemManager().get_browser_version_from_os("google-chrome")
        print(f"os_version:{os_version}")
        return os_version
    except Exception as e:
        return None


def get_chrome_version_info(version_info: str):
    if os.path.exists(chrome_json_file):
        with open(chrome_json_file) as f:
            data = f.read()
            json_data = json.loads(data)
            if json_data.get(version_info, None) is not None:
                return True, json_data.get(version_info)
            else:
                dict_version_info = {}
                google_driver_json_url = 'https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json'
                res = requests.get(google_driver_json_url)
                res_dict = json.loads(res.text)
                version_list = res_dict['versions']
                for version in version_list:
                    downloads_ = version['downloads']
                    if downloads_.get('chromedriver', None) is not None:
                        download_list = downloads_['chromedriver']
                        for data in download_list:
                            if data['platform'] == 'win64':
                                version_place = str(version['version'])
                                version_ = version_place[0:version_place.rfind('.')]
                                dict_version_info[version_] = data['url']
                with open(chrome_json_file, 'w+') as f:
                    json.dump(dict_version_info, f, indent=4)
                if dict_version_info.get(version_info, None) is not None:
                    version_url = dict_version_info[version_info]
                    return True, version_url
                return False, 'error to get'

    else:
        dict_version_info = {}
        google_driver_json_url = 'https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json'
        res = requests.get(google_driver_json_url)
        res_dict = json.loads(res.text)
        version_list = res_dict['versions']
        for version in version_list:
            downloads_ = version['downloads']
            if downloads_.get('chromedriver', None) is not None:
                download_list = downloads_['chromedriver']
                for data in download_list:
                    if data['platform'] == 'win64':
                        version_place = version['version']
                        version_ = version_place[0:version_place.rfind('.')]
                        dict_version_info[version_] = data['url']
        with open(chrome_json_file, 'w+') as f:
            json.dump(dict_version_info, f, indent=4)
        if dict_version_info.get(version_info, None) is not None:
            version_url = dict_version_info[version_info]
            return True, version_url
        return False, 'error to get'


def download_suit_chrome_driver(chrome_driver_path: str = "chromedriver.exe"):
    """
    下载合适的chrome_driver.exe
    Returns:
    """
    is_ok, chrome_driver_version = get_chromedriver_version(chrome_driver_path)
    browser_version = get_chrome_version()
    if is_ok:
        if str(chrome_driver_version).count(browser_version) > 0:
            print(f"当前已是合适的chrome_driver:{chrome_driver_version}")
            return True
        else:
            chrome_driver_big_version = browser_version.split(".")[0]
            if int(chrome_driver_big_version) < 115:
                print("下载Chrome-Driver")
                install_chrome_driver()
            else:
                is_get_chrome, version_info = get_chrome_version_info(browser_version)
                if is_get_chrome:
                    download_url = version_info
                    print('ok-remove-0')
                    if os.path.exists(chrome_zip):
                        os.remove(chrome_zip)
                    print('ok-remove-2')
                    download_file(chrome_zip, download_url)
                    print('ok-remove-3')
                    with zipfile.ZipFile(chrome_zip, 'r') as zip_ref:
                        zip_ref.extractall('./')
                    shutil.move('./chromedriver-win64/chromedriver.exe', './chromedriver.exe')
                    if os.path.exists(chrome_zip):
                        os.remove(chrome_zip)
    else:
        chrome_driver_big_version = browser_version.split(".")[0]
        if int(chrome_driver_big_version) < 115:
            print("下载Chrome-Driver")
            install_chrome_driver()
        else:
            is_get_chrome, version_info = get_chrome_version_info(browser_version)
            if is_get_chrome:
                download_url = version_info
                print('ok-remove-0')
                if os.path.exists(chrome_zip):
                    os.remove(chrome_zip)
                print('ok-remove-2')
                download_file(chrome_zip, download_url)
                print('ok-remove-3')
                with zipfile.ZipFile(chrome_zip, 'r') as zip_ref:
                    zip_ref.extractall('./')
                shutil.move('./chromedriver-win64/chromedriver.exe', './chromedriver.exe')
                if os.path.exists(chrome_zip):
                    os.remove(chrome_zip)


if __name__ == '__main__':
    download_suit_chrome_driver("chromedriver.exe")

调用方式:

  download_suit_chrome_driver("xxxxx")  ## xxxxxx表示chrome_driver.exe路径(可为空)

github下载链接: https://github.com/huifeng-kooboo/download_chrome_driver文章来源地址https://www.toymoban.com/news/detail-744484.html

到了这里,关于python selenium下载一个合适的chromedriver.exe(稳定版本)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • chromedriver.exe 的所有版本下载地址

    Chrome for Testing availability   上面的网址是V115  v116.... 以上的。 CNPM Binaries Mirror 上面这个是V115版本以下的。 这个文章没有任何实际价值,记录的原因是因为突然发现过去的py无法运行,原因是chrome浏览器偷偷升级到V115,于是找了一下,并记录下来,免得老年痴呆忘记。

    2024年02月12日
    浏览(37)
  • 【Selenium】下载最新117版本的ChromeDriver

    用Selenium自动化Chrome网页操作,需要下载与Chrome版本配套的ChromeDriver。 Chrome经常更新,所以常常需要下载新版本的ChromeDriver,今天发现最新版本的117 Driver在我过去常去的下载站上下不到了,跑了好几个ChromeDriver的下载站,最新的都停留在114版本。 这里有最新的,选择相应系

    2024年02月06日
    浏览(102)
  • selenium下载安装对应的chromedriver并执行

    selenium Selenium 是广泛使用的模拟浏览器运行的库,它是一个用于 Web 应用程序测试的工具。 Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。 对应版本chrome驱动下载 查看浏览器对应的chrome版本 浏览器输入 chrome://version/ 114以及之

    2024年02月05日
    浏览(44)
  • 【备忘】ChromeDriver 官方下载地址 Selenium,pyppetter依赖

    https://googlechromelabs.github.io/chrome-for-testing/#stable windows系统选择win64版本下载即可

    2024年01月22日
    浏览(35)
  • Selenium的webdriver(Chromedriver、Edgedriver、geckodriver、IEDriverServer)驱动下载地址

    chrome版本chromedriver驱动下载地址 http://chromedriver.storage.googleapis.com/index.html Edge版本microsoft-edge驱动下载地址 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ geckodriver驱动下载地址: mozilla/geckodriver selenium版本iedriverserver驱动下载地址 http://selenium-release.storage.googleapis.com/ind

    2024年02月08日
    浏览(43)
  • Selenium安装WebDriver:ChromeDriver谷歌浏览器驱动下载安装与使用最新版118/119/120

    在使用之前的代码通过selenium操作Chrome浏览器时,安装中遇到了Chrome版本与浏览器驱动不匹配的的问题,在此记录安装下过程 我们首先确定自己的Chrome版本 Chrome设置-关于Chrome 可以看到,当前chrome是最新版本:119.0.6045.124(正式版本) (64 位)。 或者在浏览器的地址栏,输入

    2024年02月05日
    浏览(60)
  • python selenium对应的浏览器chromedriver版本不一致

    报错:session not created: This version of ChromeDriver only supports Chrome version google浏览器对应解决方法 这是因为python使用selenium调用模块的时候,会用chromedriver去调用google浏览器。chrome和chromedriver版本不一致导致的,我们只需要升级下chromedriver的版本即可 浏览器版本查看 查看chromedri

    2024年02月07日
    浏览(53)
  • Python--使用selenium通过chromedriver调用谷歌浏览器

    原文网址:Python--使用selenium通过chromedriver调用谷歌浏览器_IT利刃出鞘的博客-CSDN博客         本文用实例介绍Python如何使用selenium通过chromedriver调用谷歌浏览器。 谷歌浏览器访问:chrome://version/ 注意:通过【帮助= 关于Google Chrome 】这种方式来查看会导致谷歌浏览器自动更新

    2023年04月21日
    浏览(99)
  • web自动化测试入门篇03——selenium使用教程_(2)在上述学习基础上,自行选择一个合适的网站,进一步在实践中去运用selenium webd(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月27日
    浏览(64)
  • Python3 Selenium4 chromedriver Pycharm闪退的问题

    Python3版本:3.11.5 Pycharm版本:2023.2.1 Chrome版本:117.0.5938.150(正式版本)  在使用最新版的Selenium4版本时,chromedriver可以驱动Chrome但是闪退,Selenium目前最新版本是4.13.0(Python版) 可能原因: 1.chromedriver版本和Chrome版本不一致导致,chromedriver版本是能下载到的最新版:117.0.5

    2024年02月06日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包