在 Python 中为 Selenium 自动下载适当的 chromedriver

tim*_*tim 3 python selenium pyinstaller selenium-chromedriver

不幸的是,Chromedriver 始终是特定于您安装的 Chrome 版本的版本。因此,当您通过 PyInstaller 在 Windows 的可部署 .exe 文件中打包您的 python 代码和 chromedriver 时,它在大多数情况下将不起作用,因为您将无法在 .exe 文件中拥有所有 chromedriver 版本。

任何人都知道如何自动从网站下载正确的 chromedriver 的方法?

如果没有,我会想出一个代码来下载 zip 文件并将其解压到 temp。

谢谢!

Hie*_*mar 13

这是 Python 的另一种方法 -

import chromedriver_autoinstaller
from selenium import webdriver

opt = webdriver.ChromeOptions()
opt.add_argument("--start-maximized")

chromedriver_autoinstaller.install()
driver = webdriver.Chrome(options=opt)
driver.get('https://stackoverflow.com/')
Run Code Online (Sandbox Code Playgroud)

这是更多信息

https://pypi.org/project/chromedriver-autoinstaller/


cru*_*dey 13

截至 2021 年 8 月,状态如下:-

chromedriver 自动安装程序

自动下载并安装支持当前安装的 chrome 版本的 chromedriver。该安装程序支持 Linux、MacOS 和 Windows 操作系统。

安装

pip install chromedriver-autoinstaller
Run Code Online (Sandbox Code Playgroud)

用法

Just type import chromedriver_autoinstaller in the module you want to use chromedriver.
Run Code Online (Sandbox Code Playgroud)

例子


from selenium import webdriver
import chromedriver_autoinstaller


chromedriver_autoinstaller.install()  # Check if the current version of chromedriver exists
                                      # and if it doesn't exist, download it automatically,
                                      # then add chromedriver to path

driver = webdriver.Chrome()
driver.get("http://www.python.org")
assert "Python" in driver.title
Run Code Online (Sandbox Code Playgroud)

参考链接在这里

  • 非常好,它确实有效! (2认同)

sup*_*uri 8

这是另一个解决方案,其中webdriver_manager不支持。此脚本将下载最新的 chrome 驱动程序版本。

import requests
import wget
import zipfile
import os

# get the latest chrome driver version number
url = 'https://chromedriver.storage.googleapis.com/LATEST_RELEASE'
response = requests.get(url)
version_number = response.text

# build the donwload url
download_url = "https://chromedriver.storage.googleapis.com/" + version_number +"/chromedriver_win32.zip"

# download the zip file using the url built above
latest_driver_zip = wget.download(download_url,'chromedriver.zip')

# extract the zip file
with zipfile.ZipFile(latest_driver_zip, 'r') as zip_ref:
    zip_ref.extractall() # you can specify the destination folder path here
# delete the zip file downloaded above
os.remove(latest_driver_zip)
Run Code Online (Sandbox Code Playgroud)

  • ```from win32com.client import Dispatch def get_version_via_com(filename): parser = Dispatch("Scripting.FileSystemObject") version = parser.GetFileVersion(filename) return version if __name__ == "__main__": path = r"C:\ Program Files\Google\Chrome\Application\chrome.exe" print get_version_via_com(path)``` 您可以获取版本号并将其存储为 `version_number = response.text` 行的一部分。 (2认同)

Hai*_*Ass 7

我有一个稍微高级一点的版本

它将检测您的 chrome 版本,获取正确的驱动程序

def download_chromedriver():
    def get_latestversion(version):
        url = 'https://chromedriver.storage.googleapis.com/LATEST_RELEASE_' + str(version)
        response = requests.get(url)
        version_number = response.text
        return version_number
    def download(download_url, driver_binaryname, target_name):
        # download the zip file using the url built above
        latest_driver_zip = wget.download(download_url, out='./temp/chromedriver.zip')

        # extract the zip file
        with zipfile.ZipFile(latest_driver_zip, 'r') as zip_ref:
            zip_ref.extractall(path = './temp/') # you can specify the destination folder path here
        # delete the zip file downloaded above
        os.remove(latest_driver_zip)
        os.rename(driver_binaryname, target_name)
        os.chmod(target_name, 755)
    if os.name == 'nt':
        replies = os.popen(r'reg query "HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon" /v version').read()
        replies = replies.split('\n')
        for reply in replies:
            if 'version' in reply:
                reply = reply.rstrip()
                reply = reply.lstrip()
                tokens = re.split(r"\s+", reply)
                fullversion = tokens[len(tokens) - 1]
                tokens = fullversion.split('.')
                version = tokens[0]
                break
        target_name = './bin/chromedriver-win-' + version + '.exe'
        found = os.path.exists(target_name)
        if not found:
            version_number = get_latestversion(version)
            # build the donwload url
            download_url = "https://chromedriver.storage.googleapis.com/" + version_number +"/chromedriver_win32.zip"
            download(download_url, './temp/chromedriver.exe', target_name)

    elif os.name == 'posix':
        reply = os.popen(r'chromium --version').read()

        if reply != '':
            reply = reply.rstrip()
            reply = reply.lstrip()
            tokens = re.split(r"\s+", reply)
            fullversion = tokens[1]
            tokens = fullversion.split('.')
            version = tokens[0]
        else:
            reply = os.popen(r'google-chrome --version').read()
            reply = reply.rstrip()
            reply = reply.lstrip()
            tokens = re.split(r"\s+", reply)
            fullversion = tokens[2]
            tokens = fullversion.split('.')
            version = tokens[0]

        target_name = './bin/chromedriver-linux-' + version
        print('new chrome driver at ' + target_name)
        found = os.path.exists(target_name)
        if not found:
            version_number = get_latestversion(version)
            download_url = "https://chromedriver.storage.googleapis.com/" + version_number +"/chromedriver_linux64.zip"
            download(download_url, './temp/chromedriver', target_name) 
 
Run Code Online (Sandbox Code Playgroud)


Nar*_*raR 5

Webdriver Manager 会为您做到这一点。请参阅此链接https://pypi.org/project/webdriver-manager/