selenium - 控制文件名下载硒
问题描述
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
path_to_download = '/home/dev/'
options = Options()
options.add_experimental_option("prefs", {
"download.default_directory": path_to_download,
"download.prompt_for_download": False,
"download.directory_upgrade": True,
"safebrowsing.enabled": True
})
options.add_argument('start-maximized')
driver = webdriver.Chrome(executable_path='/home/dev/Downloads/chromedriver_linux64/chromedriver',
options=options)
#long logic
elem2 = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//*[contains(text(), 'Excel')]")))
elem2.click() #downloads the file (export to excel)
现在我坚持把一个time.sleep(5)
thenos.rename(f'{path_to_download}/exported.xlsx',f'{path_to_download}/{my_id}.xlsx')
有没有办法在下载文件时或之前控制文件名?
解决方案
您可以通过检查下载目录中的文件是否存在并一遍又一遍地循环直到文件出现来实现这一点。
你可以这样做:
# check the size of the file and return 0 if doesn't exist
def getSize(filename):
if os.path.isfile(filename):
st = os.stat(filename)
return st.st_size
else:
return 0
def wait_download(file_path):
current_size = getSize(file_path)
printed = False
start_time = time.time()
# loop over and over until the current_size change
while current_size !=getSize(file_path) or getSize(file_path)==0:
current_size = getSize(file_path)
# print something to the string to know that we are waiting for the file
while printed == False:
print("Downloading file...")
print("Waiting for download to complete...")
printed = True
# Here we add an exit to not loop forever
if (time.time() - start_time) > 15:
return -1
return 0
# In your code you can call the function like that
files = wait_download(f'{path_to_download}/exported.xlsx')
if files == 0:
#do something
else:
# the file didn't download
推荐阅读
- android - Microsoft Exchange Active Sync 的 Android 帐户类型
- elasticsearch - Storm ui 中的拓扑不会发出或传输元组
- python - 从网络上抓取数据,然后重组为 Pandas DataFrame
- r - R:在for循环中没有用函数替换值
- c# - 派生类实例化 BASE 类的 2 个对象
- bash - 在 Linux shell/bash 脚本中比较时间戳的最佳方法?
- android - Android App (Kotlin) 在没有堆栈跟踪的情况下崩溃,致命信号 6
- c# - 尝试使用正则表达式分隔单词
- memory - 线程索引作为 CUDA 中的内存位置索引
- java - 使用 midi 音序器及时为 Java Swing 滑块设置动画的问题