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