Java调试谷歌PC浏览器,控制操作网页


1、引入依赖,导入jar太多了        

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.25.0</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-server</artifactId>
            <version>2.25.0</version>
        </dependency>

2、下载驱动


查看谷歌浏览器版本:
设置里    或者   访问:chrome://version/
结果:106.0.5249.119 (正式版本) (64 位)
下载控制驱动,打开
http://chromedriver.storage.googleapis.com/index.html
找到对应版本的驱动
我的版本对应  106.0.5249.61
不确定就进去文件夹,里面有notes.txt文件。
**************************************************************************
---------ChromeDriver 106.0.5249.61 (2022-09-28)---------
Supports Chrome version 106
**************************************************************************
然后放到谷歌同目录下,防止后续忘记放哪里了

3、测试代码:


    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");//驱动路径
        ChromeOptions options=new ChromeOptions();
        options.addArguments("user-data-dir=D:/tmp/User Data");//用户数据文件夹,随便设置,不能没有
        WebDriver driver = new ChromeDriver(options);
        driver.get("https://www.baidu.com/");
    }

运行main可以直接启动谷歌浏览器,并打开百度。

4、后续教程


https://blog.csdn.net/scratlc/article/details/62044040?app_version=5.9.0&code=app_1562916241&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%2262044040%22%2C%22source%22%3A%22qq_43319748%22%7D&uLinkId=usr1mkqgl919blen&utm_source=app

代码参考

公共方法规范接口,仿js方法

package com.example;

import org.openqa.selenium.WebElement;

import java.util.List;

public interface CommonServiceApi {
    /**   通过id获取元素   **/
    WebElement getElementById(String id);
    /**   从w的子元素开始查找,通过id获取元素   **/
    WebElement getElementById(WebElement w, String id);
    /**   通过class获取元素   **/
    List<WebElement> getElementsByClassName(String className);
    /**   从w的子元素开始查找,通过class获取元素   **/
    List<WebElement> getElementsByClassName(WebElement w, String className);
    /**   通过<标签名>获取元素列表   **/
    List<WebElement> getElementsByTagName(String tagName);
    /**   从w的子元素开始查找,通过<标签名>获取元素列表   **/
    List<WebElement> getElementsByTagName(WebElement w, String tagName);
    /**   通过name获取元素   **/
    WebElement getElementsByName(String name);
    /**   从w的子元素开始查找,通过name获取元素   **/
    WebElement getElementsByName(WebElement w, String name);
    /**   通过指定路径获取元素   **/
    WebElement getElementByXpath(String path);
    /**   从w的子元素开始查找,通过指定路径获取元素   **/
    WebElement getElementByXpath(WebElement w, String path);
    /**   从列表中获取第一个元素,没有就返回null    **/
    <T> T getFirstElement(List<T> list);
    /**   获取当前元素的父元素   **/
    WebElement getParentElement(WebElement w);
    /**   设置input类型元素的value   **/
    void setInputValue(WebElement w, String string);
    /**   比较当前元素的文本值和目标值   **/
    boolean equalsText(WebElement w, String text);
    /**   比较当前元素指定的属性值和目标值   **/
    boolean equalsAttribute(WebElement w, String name, String value);

}

公共配置抽象类: 实现公共方法,提供子类启动入口

package com.example;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

public abstract class WebCommonService implements CommonServiceApi{

    public SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
    public String path;
    public String url;
    public WebDriver driver;
    public WebCommonService(){
        init();
    }

    /**
     * 初始化
     */
    public void init(){
        System.setProperty("webdriver.chrome.driver", "C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe");
        ChromeOptions options=new ChromeOptions();
        options.addArguments("user-data-dir=D:/tmp/User Data");
        driver = new ChromeDriver(options);
    }

    /**
     * 入口
     */
    public abstract void start();


    /**
     * **************************************************************************
     * **************************************************************************
     *
     *                            通用函数
     *
     * **************************************************************************
     * **************************************************************************
     */


    public void log(Object string){
        System.out.println("["+sf.format(new Date())+"]:"+string);
    }

    public void _wait(long SSS){
        try {
            Thread.sleep(SSS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public boolean isEmpty(Object o){
        if(o==null)return true;
        if(o instanceof String){
            return "".equals(o);
        }else{
            return false;
        }
    }



    /**
     * **************************************************************************
     * **************************************************************************
     *
     *                             元素api操作
     *
     * **************************************************************************
     * **************************************************************************
     */



    public WebElement getElementById(String id){
        return driver.findElement(By.id(id));
    }

    public List<WebElement> getElementsByClassName(String className){
        return driver.findElements(By.className(className));
    }

    public List<WebElement> getElementsByTagName(String tagName){
        return driver.findElements(By.tagName(tagName));
    }

    public WebElement getElementsByName(String name){
        return driver.findElement(By.name(name));
    }

    public WebElement getElementById(WebElement w,String id){
        return w.findElement(By.id(id));
    }

    public List<WebElement> getElementsByClassName(WebElement w,String className){
        return w.findElements(By.className(className));
    }

    public List<WebElement> getElementsByTagName(WebElement w,String tagName){
        return w.findElements(By.tagName(tagName));
    }

    public WebElement getElementsByName(WebElement w,String name){
        return w.findElement(By.name(name));
    }

    public <T> T getFirstElement(List<T> list){
        if(list==null||list.size()<1)return null;
        return list.get(0);
    }

    public WebElement getElementByXpath(String path){
        return driver.findElement(By.xpath(path));
    }

    public WebElement getElementByXpath(WebElement w,String path){
        return w.findElement(By.xpath(path));
    }

    public WebElement getParentElement(WebElement w){
        return getElementByXpath(w,"..");
    }

    public void setInputValue(WebElement w,String string){
        if(isEmpty(string)){
            ((JavascriptExecutor)driver).executeScript("arguments[0].value=arguments[1]", w, "");
        }else {
            ((JavascriptExecutor)driver).executeScript("arguments[0].value=arguments[1]", w, string);
        }
        //这两个操作是用来触发vue的数据刷新机制
        w.sendKeys(Keys.SPACE);
        if(!equalsText(w,string)){//按一下空格键,发现输入框内容发生变化,删除输入的空格,没变化说明没添加上空格,不用删除
            w.sendKeys(Keys.BACK_SPACE);
        }
    }

    public boolean equalsText(WebElement w,String text){
        return  w!=null&&text.equals(w.getText());
    }

    public boolean equalsAttribute(WebElement w,String name,String value){
        return  w!=null&&value.equals(w.getAttribute(name));
    }


}

实现一个脚本类

package com.example.test;

import com.example.WebCommonService;
import org.openqa.selenium.WebElement;

import java.util.List;

public class TestScript extends WebCommonService {

    @Override
    public void start() {
        driver.get("http://localhost:81/index2.html");
        //点击素材实用
        List<WebElement> list= getElementsByClassName("el-menu-item");
        for(WebElement w:list){
            WebElement span=getFirstElement(getElementsByTagName(w,"span"));
            if(equalsText(span,"素材实用")){
                w.click();
                break;
            }
        }
        list.clear();
        //切换iframe
        list= getElementsByClassName("el-tab-pane");
        for(WebElement w:list){
            if(!equalsAttribute(w,"aria-hidden","true")){
                WebElement frame=getFirstElement(getElementsByTagName(w,"iframe"));
                driver.switchTo().frame(frame);
                break;
            }
        }
        list.clear();

        //打开编辑模式
        WebElement switchButton=getFirstElement(getElementsByClassName("el-switch"));
        if(switchButton!=null){
            switchButton.click();
        }

        //打开微博热榜编辑页面
        list= getElementsByClassName("a1");
        for(WebElement w:list){
            if(equalsText(w,"微博热榜")){
               w.click();
            }
        }
        list.clear();

        //把 微博热榜 改为 微博微博
        WebElement dialogBody=getFirstElement(getElementsByClassName("el-dialog__body"));
        WebElement titleInput=getFirstElement(getElementsByTagName(dialogBody,"input"));
        setInputValue(titleInput,"微博热榜");
        _wait(1000);

        //保存
        list=getElementsByClassName(getParentElement(dialogBody),"el-button--primary");
        for(WebElement w:list){
            WebElement span=getFirstElement(getElementsByTagName(w,"span"));
            if(equalsText(span,"保存") ){
                w.click();
                break;
            }
        }
        list.clear();


        //处理二次确认弹窗
        WebElement confirm=getFirstElement(getElementsByClassName("el-message-box__wrapper"));
        list=getElementsByTagName(confirm,"button");
        for(WebElement w:list){
            WebElement span=getFirstElement(getElementsByTagName(w,"span"));
            if(equalsText(span,"确定")){
                w.click();
                break;
            }
        }

        //关闭
        list=getElementsByClassName(getParentElement(dialogBody),"el-button--default");
        for(WebElement w:list){
            WebElement span=getFirstElement(getElementsByTagName(w,"span"));
            if(equalsText(span,"取 消")){
                w.click();
                break;
            }
        }
        list.clear();


    }

    public static void main(String[] args) {
        new TestScript().start();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值