首页 > 编程语言 >抖音自动化-实现给特定用户发私信 (java-selenium)

抖音自动化-实现给特定用户发私信 (java-selenium)

时间:2023-12-11 13:59:15浏览次数:33  
标签:私信 java String driver selenium sleep import div public

重点:

打开新的窗口后,driver发生了变化,不能再用之前的driver;可以通过窗口句柄,跳转到新页面

            // 页面跳转,driver再次发生变化;(既 :重新打开一个浏览器窗口后,driver发生了变化,不能使用原先窗口的driver)
            for (String windowHandle : driver.getWindowHandles()) {
                handle = windowHandle;
            }
            //切换driver
            driver.switchTo().window(handle);

整体代码

package douyin;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.Test;
import utils.ReadPropertiesUtils;

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

public class PingLun06ToBlog {

    public static WebDriver driver;

    public static  String content="您好,感谢您";
    
    @Test
    public void test01() throws InterruptedException, IOException {
        System.out.println("1");
        getDriver();
    }

    public static WebDriver getDriver() throws InterruptedException, IOException {
        // Google chrome driver位置
        String driverPath = "D:\\soft\\chrome120\\chrome.exe";
        // chrome 浏览器位置
        String browerPath = "D:\\file\\jar\\chromeDriver120\\chromedriver.exe";
        // chrome 浏览器数据存储目录位置
        String userData="--user-data-dir=C:\\Users\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\";
        System.setProperty("webdriver.chrome.driver", driverPath);
        System.setProperty("webdriver.chrome.bin", browerPath);
        ChromeOptions chromeOptions = new ChromeOptions();
        // 防止403
        chromeOptions.addArguments("--remote-allow-origins=*");
        chromeOptions.addArguments(userData);

        driver = new ChromeDriver(chromeOptions);
        String url = "https://www.douyin.com/user/self?showTab=like";
        driver.get(url);
        String firstHandle = driver.getWindowHandle();
        // 最大化窗口
        driver.manage().window().maximize();

        Thread.sleep(3000);
        // 加载需要发送的抖音号
        List<String> listsKeys= ReadExcel.getListByText();

        for (int i = 0; i < listsKeys.size(); i++) {
            // 抖音号
            String key=listsKeys.get(i);
            System.out.println(i+ " = "+key+ "          开始发送");
            Thread.sleep(500);
            //清除搜索框内容
            driver.findElement(By.xpath("//*[@id=\"douyin-header\"]/div[1]/header/div/div/div[1]/div/div[2]/div/div/input")).sendKeys(Keys.CONTROL+"a");
            Thread.sleep(500);
            // 搜索框输入内容
            driver.findElement(By.xpath("//*[@id=\"douyin-header\"]/div[1]/header/div/div/div[1]/div/div[2]/div/div/input")).sendKeys(key);
            // 点击搜索
            driver.findElement(By.xpath("//span[text()='搜索']")).click();
            String handle = ""; // 用于装浏览器窗口句柄
            // 页面跳转,driver再次发生变化;(既 :重新打开一个浏览器窗口后,driver发生了变化,不能使用原先窗口的driver)
            for (String windowHandle : driver.getWindowHandles()) {
                handle = windowHandle;
            }
            //切换driver
            driver.switchTo().window(handle);
            driver.get(driver.getCurrentUrl());
            Thread.sleep(6000);
            //点击头像
            List<WebElement>  lists =  driver.findElements(By.xpath("//ul//li[@class='MgWTwktU search-result-card mpsAEvY1']"));
            lists.get(0).findElement(By.xpath("//p[@class='_K3SLhVc']")).click();
            Thread.sleep(500);
            // 页面跳转,driver再次发生变化
            for (String windowHandle : driver.getWindowHandles()) {
                handle = windowHandle;
            }
            driver.switchTo().window(handle);
            driver.get(driver.getCurrentUrl());
            Thread.sleep(6000);
            // 点击私信
            driver.findElement(By.xpath("//button[text()='私信']")).click();
            Thread.sleep(3000);
            // 发送消息
            driver.findElement(By.xpath("//div[@class='public-DraftStyleDefault-block public-DraftStyleDefault-ltr']")).sendKeys(content);
            // 点击发送按钮
            driver.findElement(By.xpath("//span[@class='cW9Hyt2D j5Gubm7H e2e-send-msg-btn']")).click();
            Thread.sleep(3000);
            driver.switchTo().window(firstHandle);
            System.out.println(i+ " = "+key+ "          发送成功");
        }

        return driver;
    }




}

读取抖音id

package douyin;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class ReadText {

    public static List<String> getListByText() throws IOException {
        List<String> lists = new ArrayList<>();
        //
    String path="C:\\Users\\Desktop\\douyin\\douyin.txt";
    File file= new File(path);
        BufferedReader br = new BufferedReader(new FileReader(file));
        String str="";
        while ((str = br.readLine())!=null){
            lists.add(str);
        }

        return lists;
    }
}

 

标签:私信,java,String,driver,selenium,sleep,import,div,public
From: https://www.cnblogs.com/ychun/p/17894197.html

相关文章

  • java String类
    一、JDKAPI帮助文档1、在线文档地址https://docs.oracle.com/javase/8/docs/api/2、离线文档地址https://www.oracle.com/java/technologies/javase-jdk8-doc-downloads.html 二、String1、定义 2、常见的String构造方法示例: 3、特点   4、字符串的......
  • Java进程内线程数量限制的相关学习
    Java进程内线程数量限制的相关学习背景还是之前出现cannotcreatenativethread的问题的后续周末在家学习了下如何在容器外抓取dump.也验证了下能否开启超过宿主机nofile配置的进程数量.想着总结一下学习到的东西,不枉周六不午休,周天晚上还开会到11点多.关于......
  • java类
    一、类1、类的定义2、对象的使用3、对象内存图 (1)单个对象内存图(2)多个对象内存图(3)多个对象指向相同3、成员变量和局部变量的区别 二、封装1、封装概述 2、private关键词 3、this关键词 三、构造方法1、概述 2、注意事项 ......
  • 学习教程大全(java、c#、Web、GIS、Andriod)
    学习教程大全(java、c#、Web、GIS、Andriod)1.Andriod││AndroidApp开发入门使用AndroidStudio2.X开发环境第2版.pdf││AndroidStudio开发实战:从零基础到App上线.pdf││Android4高级编程(jb51.net).pdf││Android程序员面试宝典pdf扫描版.pdf......
  • Java 环境搭建
    Java环境搭建Java本来是sun公司的,然后被Oracle收购了。因为Java本身也是开源产品,所以就出现了官方OracleJDK和开源的OpenJDK。这里一般搭建说的是OracleJDK~做Java开发的朋友跟我说,我们目前使用这个层面是无法感知两个版本的区别的,都能正常使用和学习。(我毕......
  • 我用 AI 写的《JavaScript 工程师的 Python 指南》电子书发布啦!
    关于本书你好,我是luckrnx09,一名靠React恰饭的前端工程师,很高兴向你介绍我的第一本开源电子书《JavaScript工程师的Python指南》。本书的内容完全免费,开源地址:https://github.com/luckrnx09/python-guide-for-javascript-engineers为什么会有这本书2022年,ChatGPT引起了......
  • java监听全局组合键
    1.jintellitypepom<!--不能注册多个组合键比如alt+abc--><!--https://mvnrepository.com/artifact/com.melloware/jintellitype--><dependency> <groupId>com.melloware</groupId> <artifactId>jintellitype</artifactId> <ver......
  • Java 面向对象入门
    第一章:类与对象1.1类与对象类与对象的定义和使用在Java中定义类,使用关键字class完成。语法如下:class类名称{属性(变量);行为(方法);}我们可以通过下面的实例来感受一下如何定义一个Person类。classPerson{//类名称首字母大写Stringn......
  • Js(Javascript)中的apply方法的使用
    ​ JavaScript中的apply()方法用于调用函数,允许指定函数的this对象和参数。也就是通过function的apply方法来调用方法,可以改变方法的this的对象,并且还可以传入方法参数,apply对于面向对象编程还是很有用的。参考文档:Js(Javascript)中的apply方法的使用-CJavaPy1、基本语......
  • java中C3P0、Druid、HikariCP 、DBCP连接池的jar包下载与IDEA配置
    ##一、什么是连接池连接池是应用程序与数据库之间的一个缓冲区,它存储了一定数量的空闲数据库连接,当应用程序需要连接数据库时,可以从连接池中获取一个可用连接,使用完毕后再将连接归还给连接池,从而避免了每次连接都需要创建和销毁连接的开销,提高了应用程序的性能和可伸缩性。连接池......