国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

javaFx+google chrome測(cè)試下載視頻

這篇具有很好參考價(jià)值的文章主要介紹了javaFx+google chrome測(cè)試下載視頻。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

package sample;

import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.Alert;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.application.Platform;
import java.io.File;
import java.net.HttpURLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import javax.swing.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class main extends Application {
    private TextField shareUrlField = new TextField();
    private CheckBox testOpenCheckbox = new CheckBox("調(diào)試");
    private TextField testPathField = new TextField();
    private TextField testTimeField = new TextField();
    private Button downloadButton = new Button("下載視頻");
    private ProgressBar progressBar = new ProgressBar(0);

    // 默認(rèn)等待時(shí)間
    private static final int DEFAULT_TEST_TIME = 5;

    private static final int WINDOW_WIDTH = 400;
    private static final int WINDOW_HEIGHT = 300;


    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("視頻下載器");
        primaryStage.setMinWidth(WINDOW_WIDTH);
        primaryStage.setMinHeight(WINDOW_HEIGHT);
        primaryStage.setMaxWidth(WINDOW_WIDTH);
        primaryStage.setMaxHeight(WINDOW_HEIGHT);
        progressBar.setPrefWidth(WINDOW_WIDTH);

        testTimeField.setPromptText("5"); // 設(shè)置默認(rèn)值提示
        downloadButton.setOnAction(e -> {
            downloadButton.setDisable(true);
            downloadButton.setText("下載中...");
            String shareUrl = shareUrlField.getText();
            boolean testOpen = testOpenCheckbox.isSelected();
            String testPath = testPathField.getText();
            // 檢查testTimeField是否為空,使用默認(rèn)值
            int testTime = testTimeField.getText().isEmpty() ? DEFAULT_TEST_TIME : Integer.parseInt(testTimeField.getText());
            // 重置進(jìn)度條
            progressBar.setProgress(0);
            // 創(chuàng)建一個(gè)后臺(tái)任務(wù)
            Task<Void> downloadTask = new Task<Void>() {
                @Override
                protected Void call() throws Exception {
                    // 在這里調(diào)用您的視頻下載代碼,將用戶輸入傳遞給下載方法
                    downloadVideo(shareUrl, testOpen, testPath, testTime);
                    return null;
                }
            };

            downloadTask.setOnSucceeded(event -> {
                // 下載完成時(shí)的處理,例如彈出消息或其他操作
                downloadButton.setText("下載視頻");
                downloadButton.setDisable(false);
            });

            downloadTask.setOnFailed(event -> {
                // 下載失敗時(shí)的處理
                downloadButton.setText("下載視頻");
                downloadButton.setDisable(false);
            });
            // 啟動(dòng)任務(wù)
            Thread downloadThread = new Thread(downloadTask);
            downloadThread.setDaemon(true); // 設(shè)置為守護(hù)線程,以便在主窗口關(guān)閉時(shí)終止下載
            downloadThread.start();

        });

        VBox vbox = new VBox(10);
        vbox.setPrefWidth(WINDOW_WIDTH); // 設(shè)置首選寬度
        vbox.setPrefHeight(WINDOW_HEIGHT); // 設(shè)置首選高度
        vbox.getChildren().addAll(
                new Label("modal_id:"),
                shareUrlField,

                new Label("下載路徑:(\\結(jié)尾)"),
                testPathField,
                new Label("等待時(shí)間 (秒):"),
                testTimeField,
                testOpenCheckbox,
                downloadButton,
                progressBar
        );

        Scene scene = new Scene(vbox, WINDOW_WIDTH, WINDOW_HEIGHT); // 設(shè)置Scene的寬度和高度
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void downloadVideo(String Url, boolean testOpen, String testPath, int testTime) {
        // 在這里調(diào)用您的視頻下載代碼,將用戶輸入傳遞給下載方法
        System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("--headless"); // 啟用無(wú)頭模式
        chromeOptions.addArguments("--disable-gpu"); // 禁用GPU加速
        chromeOptions.addArguments("--headless", "--no-sandbox"); //禁用沙盒模式
        WebDriver driver = new ChromeDriver(chromeOptions);
//        //URL
        String shareUrl="https://www.douyin.com/video/"+Url;
//        //測(cè)試地址
//        Boolean testOpen=true;
//        //下載路徑
//        String testPath="C:\\Users\\T\\Desktop\\";
//        //等待時(shí)間
//        int testTime=5;
        try{
            driver.get(shareUrl); // 替換為目標(biāo)頁(yè)面的URL
            Thread.sleep(testTime*1000);
            String localPath=testPath;
            String absoluteFilePath = localPath+"screenshot.png"; // 使用絕對(duì)文件路徑
            if(testOpen){
                File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
                FileUtils.copyFile(screenshot, new File(absoluteFilePath));
            }
            // 獲取頁(yè)面源代碼
            String pageSource = driver.getPageSource();
            driver.quit();
            //打開(kāi)頁(yè)面抓取
//            WebElement dynamicDataElement = driver.findElement(By.xpath("http://*[@id=\"__next\"]/div[1]/div[3]/div/div/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]"));
//            WebElement dynamicDataElement =driver.findElement(By.cssSelector("#__next > div:nth-child(1) > div:nth-child(3) > div > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1)"));
//            String dynamicData = dynamicDataElement.getText();
//            System.out.println("Dynamic Data: " + dynamicData);
            //無(wú)頭模式正則
            String regex="(?<=<source class=\"\" src=\")(.*?)(?=\")";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(pageSource);
            String extractedString=null;
            while (matcher.find()) {
                extractedString = matcher.group();
            }
            //采集標(biāo)題
//            String titleRegex="(?<=<span><span class=\"Nu66P_ba\"><span><span><span><span>)(.*?)(?=</span>)";
//            Pattern titlePattern = Pattern.compile(titleRegex);
//            Matcher titleMatcher = titlePattern.matcher(pageSource);
//            String titleExtractedString=random();
//            while (titleMatcher.find()) {
//                titleExtractedString = titleMatcher.group();
//            }
            String titleExtractedString=shareUrl.split("video/")[1];
            System.out.println("ID:"+titleExtractedString);
            System.out.println("https:"+extractedString);
            if(extractedString==null){
                Platform.runLater(() ->showErrorAlert("失敗","下載失敗"));
            }
            //下載視頻
            down("https:"+extractedString,localPath,titleExtractedString);
        }catch(Exception e){
            System.out.println(e.getMessage());
            driver.quit();
        }
    }
    public  void down(String videoURL,String localPath,String title){
        String savePath = localPath+title+".mp4"; // 本地保存視頻的文件路徑
        System.out.println("down——URL: " + videoURL);
        try {
            URL url = new URL(videoURL);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 添加自定義請(qǐng)求頭,模擬瀏覽器請(qǐng)求
            connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36");
            connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7");
            connection.setRequestProperty("Host", "www.douyin.com");

            InputStream inputStream = new ProgressMonitorInputStream(null, "正在下載視頻", connection.getInputStream());
            FileOutputStream fileOutputStream = new FileOutputStream(savePath);

            byte[] buffer = new byte[4096];
            int bytesRead;
            long totalBytesRead = 0;
            long totalBytes = url.openConnection().getContentLength(); // 獲取總字節(jié)數(shù)

            while ((bytesRead = inputStream.read(buffer)) != -1) {
                fileOutputStream.write(buffer, 0, bytesRead);
                totalBytesRead += bytesRead;

                // 計(jì)算下載進(jìn)度
                int progress = (int) ((totalBytesRead * 100) / totalBytes);
                Platform.runLater(() ->setProgress(progress));
                System.out.println("下載進(jìn)度: " + progress + "%");
            }

            inputStream.close();
            fileOutputStream.close();

            System.out.println("視頻下載完成。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void setProgress(int progress){
        progressBar.setProgress((double)progress/100);
    };
    public   String random(){
        int length = 18;
        StringBuilder randomString = new StringBuilder();

        Random random = new Random();

        for (int i = 0; i < length; i++) {
            int digit = random.nextInt(10); // 生成0到9之間的隨機(jī)數(shù)字
            randomString.append(digit);
        }

        String random18DigitNumber = randomString.toString();
        return  random18DigitNumber;
    }
    // 彈出錯(cuò)誤提示框
    private void showErrorAlert(String title, String content) {
        Alert alert = new Alert(Alert.AlertType.ERROR);
        alert.setTitle(title);
        alert.setHeaderText(null);
        alert.setContentText(content);
        alert.showAndWait();
    }
}

pom

<dependencies>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version> <!-- 版本號(hào)可以根據(jù)需要進(jìn)行更改 -->
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version> <!-- 使用最新版本 -->
        </dependency>
    </dependencies>
    <build>
        <!--打包成jar包時(shí)的名字-->
        <finalName>test</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>sample.main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

編譯好編譯好的文件? 需要下載谷歌瀏覽器?和對(duì)應(yīng)的驅(qū)動(dòng)文件,驅(qū)動(dòng)文件放在C盤根目錄下文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-744471.html

到了這里,關(guān)于javaFx+google chrome測(cè)試下載視頻的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ffmpeg解決bilibili下載的音視頻分離問(wèn)題,將音視頻一鍵合成

    ffmpeg解決bilibili下載的音視頻分離問(wèn)題,將音視頻一鍵合成

    1:到FFmpeg下載安裝包,我安裝的是windows 下載打包文件 2:解壓文件到本地 以下為解壓后的文件視圖 3:點(diǎn)擊進(jìn)去第一個(gè)bin文件,復(fù)制該目錄,安裝到本地環(huán)境變量中 然后點(diǎn)擊確定進(jìn)行保存設(shè)置 4:ctrl+r打開(kāi)運(yùn)行,輸入cmd打開(kāi)命令窗口,輸入ffmpeg -version查看版本 安裝成功 將所

    2024年02月11日
    瀏覽(28)
  • 抖音視頻提取工具可導(dǎo)出視頻分享鏈接|視頻爬蟲批量下載

    抖音視頻提取工具可導(dǎo)出視頻分享鏈接|視頻爬蟲批量下載

    抖音無(wú)水印視頻批量下載工具操作指南 一、工具介紹 我們開(kāi)發(fā)了一款功能強(qiáng)大的視頻批量下載工具,不僅能夠通過(guò)單個(gè)視頻鏈接進(jìn)行提取,還可以通過(guò)進(jìn)行視頻搜索,Q:290615413實(shí)現(xiàn)批量提取和有選擇性的下載。 二、操作步驟 2.1 批量提取視頻 進(jìn)入軟件,點(diǎn)擊“

    2024年04月15日
    瀏覽(98)
  • 抖音視頻如何下載保存(方法分享)

    有時(shí)刷抖音視頻,看的喜歡的視頻想要下載到本地,但是有很多視頻無(wú)法下載或者下載下來(lái)是有水印的,那怎么辦呢? 抖音視頻下載有兩種情況: 一種是可以直接點(diǎn)擊分享下載,然后可以直接點(diǎn)擊保存到相冊(cè)。 視頻就自動(dòng)下載下來(lái)了,但是這直接下載下來(lái)的視有水印。 還有

    2024年04月14日
    瀏覽(21)
  • 抖音視頻批量提取采集軟件|視頻無(wú)水印下載工具

    抖音視頻批量提取采集軟件|視頻無(wú)水印下載工具

    高效批量提取抖音視頻,輕松應(yīng)對(duì)營(yíng)銷需求! 在抖音視頻營(yíng)銷中,如何高效地獲取大量視頻資源是許多市場(chǎng)人員面臨的挑戰(zhàn)。針對(duì)這一需求,我們開(kāi)發(fā)了一款功能強(qiáng)大的抖音視頻批量提取采集軟件,幫助您快速、方便地獲取所需視頻,滿足您的營(yíng)銷需求。 簡(jiǎn)介: 我們的軟件

    2024年04月14日
    瀏覽(26)
  • 抖音視頻批量下載軟件功能|短視頻數(shù)據(jù)挖掘軟件

    抖音視頻批量下載軟件功能|短視頻數(shù)據(jù)挖掘軟件

    《抖音視頻批量下載軟件——提升工作效率的利器》 ? ? ? ? 在當(dāng)今信息爆炸的時(shí)代,視頻內(nèi)容已經(jīng)成為人們獲取信息、娛樂(lè)放松的重要途徑之一。而針對(duì)抖音視頻的批量下載需求,我們推出了一款功能強(qiáng)大的軟件,讓您輕松實(shí)現(xiàn)視頻批量提取,提高工作效率,讓您事半功倍

    2024年03月09日
    瀏覽(100)
  • 多平臺(tái)音視頻下載軟件工具 - VidJuice UniTube下載

    多平臺(tái)音視頻下載軟件工具 - VidJuice UniTube下載

    提到音視頻下載工具,Downie 基本是 Mac 平臺(tái)的首選。而 Windows 用戶也不用羨慕,有一款工具可以實(shí)現(xiàn)! 那就是 VidJuice UniTube ,一款支持 Win、Mac 以及安卓平臺(tái),能從 10000+熱門站點(diǎn),下載音視頻的工具。 VidJuice UniTube 支持 1000+國(guó)內(nèi)外熱門視頻網(wǎng)站,下載視頻簡(jiǎn)單易用。在安

    2024年02月04日
    瀏覽(33)
  • 抖音視頻無(wú)水印采集拓客軟件|視頻批量下載提取工具

    抖音視頻無(wú)水印采集拓客軟件|視頻批量下載提取工具

    抖音視頻無(wú)水印批量采集拓客軟件助力高效營(yíng)銷! ? ? ? ? 隨著抖音平臺(tái)的崛起,視頻已成為各行各業(yè)進(jìn)行營(yíng)銷的重要工具。但是,傳統(tǒng)的視頻下載方式往往效率低下,無(wú)法滿足快速獲取大量視頻的需求。針對(duì)這一問(wèn)題,我們開(kāi)發(fā)了一款視頻無(wú)水印批量采集拓客軟件。 工具

    2024年04月14日
    瀏覽(24)
  • 抖音視頻下載.py(23年9月份可用)

    聲明:僅供學(xué)習(xí)交流使用?。。?抖音無(wú)水印視頻下載; 首先登錄抖音網(wǎng)頁(yè)端 打開(kāi)要下載的視頻userId 然后編碼實(shí)現(xiàn)下載 最后是完整代碼,拿走就能用那種:

    2024年02月07日
    瀏覽(21)
  • 抖音視頻批量下載工具|抖音數(shù)據(jù)抓取工具

    抖音視頻批量下載工具|抖音數(shù)據(jù)抓取工具

    ? ? ? ? 想要隨時(shí)隨地觀看抖音平臺(tái)上的精彩視頻內(nèi)容嗎?不必?fù)?dān)心!這款基于C#開(kāi)發(fā)的抖音視頻下載工具將成為您的得力助手,讓您輕松暢享最新、最熱的視頻內(nèi)容。 【多功能實(shí)用】 無(wú)論是批量視頻提取還是固定視頻下載,這款工具都能滿足您的需求。通過(guò)輸入進(jìn)行

    2024年04月09日
    瀏覽(147)
  • 將抖音視頻轉(zhuǎn)成MP3并下載

    這篇是在上一篇的基礎(chǔ)上寫的,這篇負(fù)責(zé)抖音作者詳情頁(yè)的視頻轉(zhuǎn)聲音提取,這篇需要用到后端。 本地啟動(dòng)后端后,在控制臺(tái)輸入對(duì)應(yīng)代碼,即可實(shí)現(xiàn)hover在封面上,按d一鍵下載音頻 控制臺(tái)代碼 后端 node 代碼 如果不想用控制臺(tái),也可以用暴力猴,暴力猴腳本如下:

    2024年01月23日
    瀏覽(88)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包