Selenium入门(二)Java整合Selenium实现模拟登录

这篇具有很好参考价值的文章主要介绍了Selenium入门(二)Java整合Selenium实现模拟登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇文章已经讲述了Java搭建Selenium环境:

Selenium入门(一)Java 搭建 Selenium 环境

下面接着实现模拟登录功能,这里拿自己的网站来进行测试,如下图

Selenium入门(二)Java整合Selenium实现模拟登录 

这里我把验证码固定了,所以不需要输入验证码即可实现。

实现思路

  1. 首先输入登录url,用WebDriver模拟打开登录页面
  2. 然后找到输入用户名和密码的input框
  3. 模拟填写用户名和密码
  4. 找到点击登录的按钮,模拟点击登录,这样就实现了模拟登录。
  5. 采用WebDriver中的【By.xpath】方法获取Dom元素
  6. xpath获取方式如下:

        鼠标移到输入框,右键点击【检查】,找到该元素所在位置

Selenium入门(二)Java整合Selenium实现模拟登录

 然后右键,选择【复制】,再选择【Copy full XPath】,即可得到xpath。

Selenium入门(二)Java整合Selenium实现模拟登录

 


代码实现

  • 主要实现代码如下:

需要注意的是webDriver的每次响应操作都要用sleep()函数加入一个时间间隔。

由于浏览器的渲染需要耗费一定的时间,而在程序执行时几乎是瞬间完成,所以要用sleep()函数。

import com.saas.reptile.utils.Common;
import com.saas.reptile.utils.LogUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class TestController {

    public static void main(String[] args){
        WebDriver webDriver = null;
        try {
            // 设置 chromedirver 的存放位置
            System.getProperties().setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions = Common.addArguments(chromeOptions);
            // 实例化
            webDriver = new ChromeDriver(chromeOptions);
            // 1.模拟打开登陆页面
            String loginUrl = "http://192.168.1.115:8088/#/login";
            LogUtils.info("打开登录页面,地址是{}",loginUrl);
            webDriver.get(loginUrl);
            // 2.等3秒钟响应后再操作,不然内容可能还没有返回
            Thread.sleep(3000L);

            // xpath 输入框元素的绝对路径
            // 3.找到账号的输入框,并模拟输入账号
            WebElement accountInput = webDriver.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/div/form/div[1]/div/div/input"));
            accountInput.sendKeys("admin");
            LogUtils.info("开始输入账号...");
            Thread.sleep(1000L);
            // 4.找到密码的输入框,并模拟输入密码
            WebElement passwordInput = webDriver.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/div/form/div[2]/div/div/input"));
            passwordInput.sendKeys("123456");
            LogUtils.info("开始输入密码...");
            Thread.sleep(1000L);
            // 5.找到登陆的按钮,并模拟点击登陆
            WebElement loginButton = webDriver.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/div/form/button"));
            loginButton.click();
            LogUtils.info("开始点击登录...");
            Thread.sleep(3000L);

            doSomeThing(webDriver);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (webDriver != null) {
                webDriver.quit();
            }
        }
    }
}
  • Common方法如下:
public class Common {

    
    /**
     * chrome添加参数
     * @param options
     * @return
     */
    public static ChromeOptions addArguments(ChromeOptions options){
        options.addArguments("disable-infobars");
        // 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
        options.addArguments("--headless");
        // 启动无沙盒模式运行,以最高权限运行
        options.addArguments("--no-sandbox");

        // 优化参数
        // 不加载图片, 提升速度
        options.addArguments("blink-settings=imagesEnabled=false");
        options.addArguments("--disable-dev-shm-usage");
        // 禁用gpu渲染
        options.addArguments("--disable-gpu");

        // 禁用阻止弹出窗口
        options.addArguments("--disable-popup-blocking");
        // 禁用扩展
        options.addArguments("disable-extensions");
        // 禁用JavaScript
        options.addArguments("--disable-javascript");
        // 默认浏览器检查
        options.addArguments("no-default-browser-check");
        Map<String, Object> prefs = new HashMap();
        prefs.put("credentials_enable_service", false);
        prefs.put("profile.password_manager_enabled", false);
        // 禁用保存密码提示框
        options.setExperimentalOption("prefs", prefs);
        return options;
    }
}
  • LogUtils.class文件如下:
public class LogUtils {
    private static final org.apache.commons.logging.Log logger;
    private static final Object lock = new Object();

    static {
        synchronized (lock) {
            logger = LogFactory.getLog(LogUtils.class);
        }
    }

    public static void info(Object... msgs) {
        StringBuilder stringBuilder = new StringBuilder();
        Throwable e = null;
        for (Object msg : msgs) {
            if (msg != null) {
                if (msg instanceof Throwable) {
                    e = (Throwable) msg;
                } else {
                    stringBuilder.append(msg).append(" ");
                }
            }
        }
        logger.info(stringBuilder, e);
    }

    public static void error(Object... msgs) {
        StringBuilder stringBuilder = new StringBuilder();
        Throwable e = null;
        for (Object msg : msgs) {
            if (msg != null) {
                if (msg instanceof Throwable) {
                    e = (Throwable) msg;
                } else {
                    stringBuilder.append(msg).append(" ");
                }
            }
        }
        logger.error(stringBuilder, e);
    }

    public static void warn(Object... msgs) {
        StringBuilder stringBuilder = new StringBuilder();
        Throwable e = null;
        for (Object msg : msgs) {
            if (msg != null) {
                if (msg instanceof Throwable) {
                    e = (Throwable) msg;
                } else {
                    stringBuilder.append(msg).append(" ");
                }
            }
        }
        logger.warn(stringBuilder, e);
    }

    public static void debug(Object... msgs) {
        StringBuilder stringBuilder = new StringBuilder();
        Throwable e = null;
        for (Object msg : msgs) {
            if (msg != null) {
                if (msg instanceof Throwable) {
                    e = (Throwable) msg;
                } else {
                    stringBuilder.append(msg).append(" ");
                }
            }
        }
        logger.debug(stringBuilder, e);
    }
}

获取LocalStorage里的值

Selenium入门(二)Java整合Selenium实现模拟登录

 上图我们可以看到登录后的【Local Storage】和【Session Storage】的内容。

查看org.openqa.selenium.html5.WebStorage的源码如下:

package org.openqa.selenium.html5;

public interface WebStorage {
    LocalStorage getLocalStorage();

    SessionStorage getSessionStorage();
}

可以看到实现了LocalStorage和SessionStorage,所以获取LocalStorage和SessionStorage里的值方法如下:

public static void doSomeThing(WebDriver webDriver){
    // 获得LocalStorge里的数据
    WebStorage webStorage = (WebStorage) new Augmenter().augment(webDriver);
    LocalStorage localStorage = webStorage.getLocalStorage();
    String username = localStorage.getItem("username");
    System.out.println("username:" + username);
    // 获得SessionStorge里的数据
    SessionStorage sessionStorage = webStorage.getSessionStorage();
    String vuex = sessionStorage.getItem("vuex");
    System.out.println("vuex:" + vuex);

}

获取cookie

public static void doSomeThing(WebDriver webDriver){

    // 获取cookie
    Set<Cookie> coo = webDriver.manage().getCookies();
    String cookies = "";
    if (coo != null){
        for ( Cookie cookie: coo){
            String name = cookie.getName();
            String value = cookie.getValue();
            cookies += name + "=" + value + "; ";
        }
    }
    System.out.println("cookies:" + cookies);
}

至此功能实现。文章来源地址https://www.toymoban.com/news/detail-402877.html

到了这里,关于Selenium入门(二)Java整合Selenium实现模拟登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python + Selenium 模拟登录jd

    最近有点时间,就随便找点东西弄弄,倒也碰到了一些问题,在此记录下 Python3.11.3 + selenium4.9.1 + opencv4.7 + PyAutoGUI0.9.54 + windows11 进入登录页面,登录方式有两种,这里直接定位点击账号登录即可 看到验证码的图片是base64格式的,可以通过src属性来获取,然后直接转成cv图片格

    2024年02月07日
    浏览(58)
  • Java+Selenium+chrome 实现定时自动登录(含验证码解析)

    作为打工人,感觉对于定时自动登录这个功能还是需要会,现将方法分享出来,供大家参考。 说明:以chrome浏览器为例,其他浏览器可以自动查找自己浏览器的驱动,方法相同 进入chrome浏览器设置,左侧菜单最后一栏,找到关于chrome,点开获取浏览器版本号,进入 https://r

    2024年02月06日
    浏览(51)
  • python使用selenium模拟登录网页页面

    python的selenium用于自动化测试,但是在自动化测试的时候也可以用来模拟登录,本次用selenium模拟登录某DN网页 代码如下(示例): 本次使用的是谷歌的内核若有需要,也可以换其他浏览器的内核 首先打开CSDN页面准备在页面中定位元素 为方便操作,直接在开发者界面中复制

    2024年02月13日
    浏览(42)
  • Python爬虫-使用Selenium模拟百度登录

        前面我已经安装好了Selenium并模拟成功了一下打开百度页面并进行查询,让我这个python初学者信心倍增,今天再来试一试百度登录 把打开百度的代码放到构造方法中 ps:那个文件目录是用于后面滑块验证图片保存的。 点击右上角的“登录”按钮,打开登录框, 代码如下:

    2024年02月06日
    浏览(57)
  • python+Selenium模拟登录报错:`InvalidCookieDomainException`

    python+Selenium登录报错 错误信息: InvalidCookieDomainException: invalid cookie domain: Cookie \\\'domain\\\' mismatch (Session info: MicrosoftEdge=110.0.1587.46) 原代码: 原因: 请看下图的domain:遮挡部分一致,但前面有的有 www. ,有的没有: 解决办法 :修改不一样的domain,具体以哪个为主需视情况而定。

    2024年02月07日
    浏览(33)
  • 在scrapy 使用selenium模拟登录获取cookie

    前言 最近有一点点爬虫需求,想总结一下scrapy框架的一些基本使用方法,加深印象,自己一直习惯使用一些脚本文件运行爬虫,面对数据量非常大,稳定性要求比较高的,效率需求比较高的情况下还是用scrapy较为合适,scrapy是一个异步的框架,所有的请求都是阻塞的,虽然在

    2024年02月11日
    浏览(62)
  • 使用selenium模拟登录解决滑块验证问题

    目录 1.登录入口 2.点击“账号密码登录” 3.输入账号、密码并点击登录 4.滑块验证过程 5.小结 本次主要是使用selenium模拟登录网页端的TX新闻,本来最开始是模拟请求的,但是某一天突然发现,部分账号需要经过滑块验证才能正常登录,如果还是模拟请求,需要的参数太多了

    2024年02月16日
    浏览(42)
  • java + Selenium 实现自动化测试,模拟人手点击操作 chrome 浏览器

    引入 maven 依赖: 安装 chromeDriver:略 SeleniumUtils.java: ChromeDriverUtils.java: 使用示例:

    2024年02月11日
    浏览(60)
  • Selenium WebDrive使用Edge浏览器模拟登录163邮箱

    ** ** 1.首先要在pycharm中下载好Selenium 2.然后下载浏览器驱动这里是链接 (https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/) *注意版本要一致 *注意放置的位置要在python3.7(这里是我用的)的更目录下也就是找到python文件夹打开后放进去有些资料说要改名这里不用因为Seleni

    2023年04月15日
    浏览(58)
  • python selenium模拟登录某网站的滑块拖动操作

    参考文章: https://blog.csdn.net/u010945216/article/details/120838385

    2024年02月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包