Neg*_*low 1 python firefox selenium
单击按钮后,如何知道下载地址(带文件名),或
如何知道正在下载的文件名(完整的扩展名)?一个问题是,例如,下载的文件有些具有 .csv 扩展名,有些则没有。
例如,我想将其重命名为统一。(请不要去 D/L DIR,找到文件并重命名)
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
...
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'text/csv')
...
driver = webdriver.Firefox(profile, options=opts, executable_path=FIREFOX_GOCKO_DRIVER_PATH)
driver.get(url)
driver.find_element_by_id(Button).click()
print("The file being downloaded is... ", ??? )
print("File is being downloaded from...", ?url?)
Run Code Online (Sandbox Code Playgroud)
这是获取最新下载的文件名和 url 的简单解决方案。
注意:在运行下面的代码之前,考虑到文件下载已完成。
如果您希望脚本等到下载完成,请检查getDownLoadedFileName答案末尾的 方法。
# open a new tab
driver.execute_script("window.open()")
# switch to new tab
driver.switch_to.window(driver.window_handles[-1])
# navigate to chrome downloads
driver.get('chrome://downloads')
# get the latest downloaded file name
fileName = driver.execute_script("return document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector('div#content #file-link').text")
# get the latest downloaded file url
sourceURL = driver.execute_script("return document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector('div#content #file-link').href")
# print the details
print(fileName)
print (sourceURL)
# close the downloads tab2
driver.close()
# switch back to main window
driver.switch_to.window(driver.window_handles[0])
Run Code Online (Sandbox Code Playgroud)
如果你愿意,你可以把它作为一种方法并在需要的地方调用。
编辑:如果您必须等到下载完成,请不要担心
您可以中继 chrome 下载状态,请检查以下方法。
只需在获取文件名的同时在代码中调用以下方法
def getDownLoadedFileName(waitTime):
downloadsList = driver.execute_script("return document.querySelector('downloads-manager').shadowRoot")
endTime = time.time()+waitTime
while True:
try:
fileName = driver.execute_script("return document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector('div#content #file-link').text")
if fileName:
return fileName
except:
pass
time.sleep(1)
if time.time() > endTime:
break
Run Code Online (Sandbox Code Playgroud)
您可以调用此方法,如下所示。
# wait until the download completes and get the file name
fileName = getDownLoadedFileName(180)
print(fileName)
Run Code Online (Sandbox Code Playgroud)
火狐:火狐使用以下方法。
def getDownLoadedFileName(waitTime):
driver.execute_script("window.open()")
WebDriverWait(driver,10).until(EC.new_window_is_opened)
driver.switch_to.window(driver.window_handles[-1])
driver.get("about:downloads")
endTime = time.time()+waitTime
while True:
try:
fileName = driver.execute_script("return document.querySelector('#contentAreaDownloadsView .downloadMainArea .downloadContainer description:nth-of-type(1)').value")
if fileName:
return fileName
except:
pass
time.sleep(1)
if time.time() > endTime:
break
Run Code Online (Sandbox Code Playgroud)
Java + Chrome:如果您正在寻找 Java 实现。
这是java中的方法。
public String waitUntilDonwloadCompleted(WebDriver driver) throws InterruptedException {
// Store the current window handle
String mainWindow = driver.getWindowHandle();
// open a new tab
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.open()");
// switch to new tab
// Switch to new window opened
for(String winHandle : driver.getWindowHandles()){
driver.switchTo().window(winHandle);
}
// navigate to chrome downloads
driver.get("chrome://downloads");
JavascriptExecutor js1 = (JavascriptExecutor)driver;
// wait until the file is downloaded
Long percentage = (long) 0;
while ( percentage!= 100) {
try {
percentage = (Long) js1.executeScript("return document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector('#progress').value");
//System.out.println(percentage);
}catch (Exception e) {
// Nothing to do just wait
}
Thread.sleep(1000);
}
// get the latest downloaded file name
String fileName = (String) js1.executeScript("return document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector('div#content #file-link').text");
// get the latest downloaded file url
String sourceURL = (String) js1.executeScript("return document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector('div#content #file-link').href");
// file downloaded location
String donwloadedAt = (String) js1.executeScript("return document.querySelector('downloads-manager').shadowRoot.querySelector('#downloadsList downloads-item').shadowRoot.querySelector('div.is-active.focus-row-active #file-icon-wrapper img').src");
System.out.println("Download deatils");
System.out.println("File Name :-" + fileName);
System.out.println("Donwloaded path :- " + donwloadedAt);
System.out.println("Downloaded from url :- " + sourceURL);
// print the details
System.out.println(fileName);
System.out.println(sourceURL);
// close the downloads tab2
driver.close();
// switch back to main window
driver.switchTo().window(mainWindow);
return fileName;
}
Run Code Online (Sandbox Code Playgroud)
这是如何在您的 Java 脚本中调用它。
// download triggering step
downloadExe.click();
// now waituntil download finish and then get file name
System.out.println(waitUntilDonwloadCompleted(driver));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1487 次 |
| 最近记录: |