我正在使用python selenium构建一个Web测试应用程序,并希望人们能够使用它,他们不太精通技术。但是,此应用程序需要 chromedriver .exe 文件才能获取网页。那么,无论该文件下载和保存在何处,我都可以始终访问该文件。或者,也许有没有办法让用户输入一次位置,然后将其保存,这样用户就不需要在每次启动应用程序时都输入它?
脚本绝对无法找到"无论下载和保存在何处"的chromedriver,除非它在系统路径上。
我快速编写了python3
,它会检查 Windowspath
上是否存在chromedriver
,如果没有就从 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 chromedrivern {e}")
还有一个更好的解决方案。您可以使用 WebDriverManager。 它将下载并安装您需要的最新版本的驱动程序。这意味着您无需注意文件所在的位置,并且如果浏览器更新,您将不会遇到问题。
在这里找到了另一个。
不幸的是,如果您不想要最新版本,似乎需要指定一个版本。不像在 Java 中它会自动下载正确的版本。
如果我理解正确,您希望脚本在本地用户的环境中找到chrome驱动程序?假设您使用的是Windows。
os.path.join(os.path.expandvars("%userprofile%"),"DownloadsChromedriver.exe")
首先你需要导入操作系统
import os
os.path.join(os.path.expandvars("%userprofile%"),"DownloadsChromedriver.exe")