无论使用在哪里,如何使python脚本找到chromedriver文件

时间:2019-08-21 03:04:28

标签: python selenium selenium-chromedriver

我当时正在使用python selenium构建一个Web测试应用程序,希望人们能够使用它,但他们对技术不太了解。但是,此应用程序需要chromedriver.exe文件才能获取该网页。因此,有什么方法可以使我始终访问该文件,而不管它在哪里下载和保存。还是有某种方法可以让用户输入一次位置,然后将其保存,以便用户不必在每次启动应用程序时都输入该位置?

4 个答案:

答案 0 :(得分:1)

除非在系统路径上,否则脚本绝对无法找到chromedriver“ 无论它在哪里下载”。

我很快将其编码为python3,它检查chromedriver是否存在于窗口path上,如果不存在,它将从URL下载它。

import requests, zipfile, io, os
curr_dir = os.path.dirname(os.path.abspath(__file__))

def is_exe(fpath):
    return os.path.isfile(fpath) and os.access(fpath, os.X_OK)

def chromedriver_exist():
    if is_exe (curr_dir + "\chromedriver.exe"):
        return curr_dir + "\chromedriver.exe"
    for path in os.environ["PATH"].split(os.pathsep):
        exe_file = os.path.join(path, "chromedriver.exe")
        if is_exe(exe_file):
            print("chromedriver exist and is executable", exe_file)
            return exe_file

chromedriver = chromedriver_exist()
if chromedriver:
    print(chromedriver)
else:
    url = "https://chromedriver.storage.googleapis.com/72.0.3626.69/chromedriver_win32.zip"
    r = requests.get(url)
    z = zipfile.ZipFile(io.BytesIO(r.content))
    z.extractall()
    chromedriver = curr_dir + "\chromedriver.exe"
    print(chromedriver)

V2

import requests, zipfile, io, os, subprocess
curr_dir = os.path.dirname(os.path.abspath(__file__))
chromedriver = "chromedriver.exe"
out = subprocess.getoutput(f"{chromedriver} -v")
if "ChromeDriver" in out:
    print(f"{out} \nChromeDriver exists in path and is executable" )
else:
    url = "https://chromedriver.storage.googleapis.com/72.0.3626.69/chromedriver_win32.zip"
    try:
        r = requests.get(url)
        z = zipfile.ZipFile(io.BytesIO(r.content))
        z.extractall()
        chromedriver =  f"{curr_dir}\chromedriver.exe"
    except Exception as e:
        print(f"Cannot download chromedriver\n {e}")

答案 1 :(得分:1)

有一个更好的解决方案。您可以使用WebDriverManager。 它将下载并安装您需要的最新版本的驱动程序。这意味着您无需照顾文件的位置,并且如果更新浏览器,也不会出现问题。

找到另一个here

不幸的是,如果您不想使用最新版本,则似乎需要指定一个版本。不像Java中会自动下载正确版本的Java。

答案 2 :(得分:0)

如果我理解正确,您是否希望脚本在本地用户的环境中定位chrome驱动程序?假设您正在使用Windows。

os.path.join(os.path.expandvars("%userprofile%"),"Downloads\Chromedriver.exe")

答案 3 :(得分:0)

首先您需要导入操作系统

import os
os.path.join(os.path.expandvars("%userprofile%"),"Downloads\Chromedriver.exe")