Comment simuler le comportement et l'interaction des utilisateurs dans le navigateur Chrome Selenium Automation ?

Afficher 10.jpg
Selenium est un outil de test automatisé d'applications Web. Il peut simuler de vrais utilisateurs effectuant diverses opérations dans le navigateur, telles que cliquer, taper, faire défiler, etc. Selenium prend en charge une variété de navigateurs, tels que Chrome, Firefox, Edge, etc., mais chaque navigateur nécessite un pilote correspondant pour communiquer avec Selenium. Cet article explique comment utiliser le navigateur Chrome dans Selenium et configurer un serveur proxy pour éviter d'être reconnu par le site Web cible.
Pour utiliser Selenium pour automatiser le navigateur Chrome, vous devez d'abord télécharger le pilote de Chrome, chromedriver, qui peut être téléchargé ici : https://chromedriver.chromium.org/downloads. Après le téléchargement, placez le fichier chromedriver.exe dans un emplacement approprié et mémorisez son chemin.
Ensuite, vous devez importer la bibliothèque Java de Selenium et vous pouvez utiliser Maven ou Gradle pour gérer les dépendances. En prenant Maven comme exemple ici, ajoutez simplement le code suivant au fichier pom.xml :

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>4.1.0</version>
    </dependency>
</dependencies>

Ensuite, vous devez créer un objet WebDriver pour contrôler le navigateur Chrome. Afin de définir le serveur proxy, vous devez créer un objet ChromeOptions et utiliser la méthode setProxy pour spécifier les informations du proxy. Les informations de proxy peuvent être construites à l'aide de la classe Proxy, qui nécessite la définition du type de proxy, du nom d'hôte, du numéro de port, du nom d'utilisateur et du mot de passe. Voici un exemple de code qui implémente la recherche par mot-clé Douyin, analyse les résultats obtenus à partir de la recherche et les enregistre dans un fichier Excel :

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openqa.selenium.By;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class SeleniumDemo {
    
    

    // 爬虫代理
    // 亿牛云 代理服务器
    final static String proxyUser = "16YUN";
    final static String proxyPass = "16IP";

    // 代理服务器
    final static String proxyHost = "www.16yun.cn";
    final static int proxyPort = 31111;

    public static void main(String[] args) throws IOException {
    
    
        // 设置chromedriver的路径
        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");

        // 创建一个Proxy对象,用于设置代理信息
        Proxy proxy = new Proxy();
        // 设置代理类型为MANUAL,表示手动设置代理
        proxy.setProxyType(Proxy.ProxyType.MANUAL);
        // 设置http和https协议的代理主机名和端口号
        proxy.setHttpProxy(proxyHost + ":" + proxyPort);
        proxy.setSslProxy(proxyHost + ":" + proxyPort);
        // 设置代理的用户名和密码
        proxy.setSocksUsername(proxyUser);
        proxy.setSocksPassword(proxyPass);

        // 创建一个ChromeOptions对象,用于设置Chrome浏览器的选项
        ChromeOptions options = new ChromeOptions();
        // 使用setProxy方法来指定代理信息
        options.setProxy(proxy);

        // 创建一个WebDriver对象,用于控制Chrome浏览器,并传入options参数
        WebDriver driver = new ChromeDriver(options);

        // 添加一个隐式等待,用于等待页面元素加载完成
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        // 使用get方法来打开抖音网页版首页
        driver.get("https://www.douyin.com/");

        // 使用findElement方法,根据id属性,找到搜索框元素,并使用sendKeys方法输入关键词“猫”
        WebElement searchBox = driver.findElement(By.id("search-input"));
        searchBox.sendKeys("猫");

        // 使用findElement方法,根据class属性,找到搜索按钮元素,并使用click方法点击搜索
        WebElement searchButton = driver.findElement(By.className("search-btn"));
        searchButton.click();

        // 使用findElements方法,根据class属性,找到所有的视频列表元素,并存入一个List中
        List<WebElement> videoList = driver.findElements(By.className("video-card"));

        // 创建一个List对象,用于存储每个视频的信息
        List<VideoInfo> videoInfoList = new ArrayList<>();

        // 遍历每个视频元素,获取其标题、作者、点赞数、评论数等信息,并创建一个VideoInfo对象,并添加到videoInfoList中
        for (WebElement video : videoList) {
    
    
            // 获取视频标题
            String title = video.findElement(By.className("video-card-title")).getText();
            // 获取视频作者
            String author = video.findElement(By.className("video-card-user-name")).getText();
            // 获取视频点赞数
            String likes = video.findElement(By.className("video-card-like-count")).getText();
            // 获取视频评论数
            String comments = video.findElement(By.className("video-card-comment-count")).getText();
            // 创建一个VideoInfo对象,并设置相应的属性
            VideoInfo videoInfo = new VideoInfo();
            videoInfo.setTitle(title);
            videoInfo.setAuthor(author);
            videoInfo.setLikes(likes);
            videoInfo.setComments(comments);
            // 将VideoInfo对象添加到videoInfoList中
            videoInfoList.add(videoInfo);
        }

        // 创建一个Workbook对象,用于表示一个Excel文件,并使用XSSFWorkbook类来创建一个xlsx格式的文件
        Workbook workbook = new XSSFWorkbook();

        // 创建一个Sheet对象,用于表示一个工作表,并命名为“抖音视频”
        Sheet sheet = workbook.createSheet("抖音视频");

        // 在Sheet对象中创建第一行,并设置单元格的值为标题、作者、点赞数、评论数等字段名
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("标题");
        headerRow.createCell(1).setCellValue("作者");
        headerRow.createCell(2).setCellValue("点赞数");
        headerRow.createCell(3).setCellValue("评论数");

        // 在Sheet对象中创建后续的行,并根据videoInfoList中的数据,设置单元格的值为对应的视频信息
        for (int i = 0; i < videoInfoList.size(); i++) {
    
    
            // 获取第i个VideoInfo对象
            VideoInfo videoInfo = videoInfoList.get(i);
            // 在Sheet对象中创建第i+1行
            Row row = sheet.createRow(i + 1);
            // 设置单元格的值为VideoInfo对象的属性值
            row.createCell(0).setCellValue(videoInfo.getTitle());
            row.createCell(1).setCellValue(videoInfo.getAuthor());
            row.createCell(2).setCellValue(videoInfo.getLikes());
            row.createCell(3).setCellValue(videoInfo.getComments());
        }

        // 使用FileOutputStream对象,将Workbook对象写入到一个指定的文件中,并关闭流
        FileOutputStream fileOut = new FileOutputStream("douyin.xlsx");
        workbook.write(fileOut);
        fileOut.close();

        // 关闭浏览器
        driver.quit();
    }
}

// 定义一个VideoInfo类,用于封装视频信息
class VideoInfo {
    
    
    private String title; // 标题
    private String author; // 作者
    private String likes; // 点赞数
    private String comments; // 评论数

    public VideoInfo() {
    
    
    }

    public VideoInfo(String title, String author, String likes, String comments) {
    
    
        this.title = title;
        this.author = author;
        this.likes = likes;
        this.comments = comments;
    }

    public String getTitle() {
    
    
        return title;
    }

    public void setTitle(String title) {
    
    
        this.title = title;
    }

    public String getAuthor() {
    
    
        return author;
    }

    public void setAuthor(String author) {
    
    
        this.author = author;
    }

    public String getLikes() {
    
    
        return likes;
    }

    public void setLikes(String likes) {
    
    
        this.likes = likes;
    }

    public String getComments() {
    
    
        return comments;
    }

    public void setComments(String comments) {
    
    
        this.comments = comments;
    }
}

description du code

  • Importez la bibliothèque Java d'Apache POI pour manipuler les fichiers Excel
  • Une fois l'objet WebDriver créé, ajoutez une attente implicite pour attendre la fin du chargement des éléments de la page.
  • Utilisez la méthode findElement de l'objet WebDriver pour rechercher le champ de recherche et le bouton de recherche en fonction de l'attribut id ou class de l'élément, et utilisez les méthodes sendKeys et click pour saisir des mots-clés et cliquer sur Rechercher.
  • Utilisez la méthode findElements de l'objet WebDriver pour rechercher toutes les listes de vidéos en fonction de l'attribut de classe de l'élément, et parcourez chaque vidéo pour obtenir son titre, son auteur, son nombre de likes, son nombre de commentaires, etc., et stockez-la dans une liste.
  • Créez un objet Workbook pour représenter un fichier Excel et un objet Sheet pour représenter une feuille de calcul
  • Créez la première ligne de l'objet Sheet et définissez la valeur de la cellule sur le titre, l'auteur, le nombre de likes, le nombre de commentaires et d'autres noms de champs.
  • Créez les lignes suivantes dans l'objet Sheet et définissez la valeur de la cellule sur les informations vidéo correspondantes en fonction des données de la liste.
  • Utilisez l'objet FileOutputStream pour écrire l'objet Workbook dans un fichier spécifié

Résumé
Cet article décrit comment utiliser le navigateur Chrome dans Selenium et configurer un serveur proxy pour éviter d'être reconnu par le site Web cible. Exécutez le code ci-dessus, vous pouvez voir que le navigateur Chrome ouvre automatiquement www.douyin.com et enregistre le titre de la vidéo, l'auteur, le nombre de likes, le nombre de commentaires et d'autres informations dans le fichier, ce qui montre que nous avons accédé avec succès au site Web cible.

Guess you like

Origin blog.csdn.net/ip16yun/article/details/131938053
Recommended