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

Selenium入門(二)Java整合Selenium實(shí)現(xiàn)模擬登錄

這篇具有很好參考價(jià)值的文章主要介紹了Selenium入門(二)Java整合Selenium實(shí)現(xiàn)模擬登錄。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

上一篇文章已經(jīng)講述了Java搭建Selenium環(huán)境:

Selenium入門(一)Java 搭建 Selenium 環(huán)境

下面接著實(shí)現(xiàn)模擬登錄功能,這里拿自己的網(wǎng)站來進(jìn)行測試,如下圖

Selenium入門(二)Java整合Selenium實(shí)現(xiàn)模擬登錄?

這里我把驗(yàn)證碼固定了,所以不需要輸入驗(yàn)證碼即可實(shí)現(xiàn)。

實(shí)現(xiàn)思路

  1. 首先輸入登錄url,用WebDriver模擬打開登錄頁面
  2. 然后找到輸入用戶名和密碼的input框
  3. 模擬填寫用戶名和密碼
  4. 找到點(diǎn)擊登錄的按鈕,模擬點(diǎn)擊登錄,這樣就實(shí)現(xiàn)了模擬登錄。
  5. 采用WebDriver中的【By.xpath】方法獲取Dom元素
  6. xpath獲取方式如下:

? ? ? ? 鼠標(biāo)移到輸入框,右鍵點(diǎn)擊【檢查】,找到該元素所在位置

Selenium入門(二)Java整合Selenium實(shí)現(xiàn)模擬登錄

?然后右鍵,選擇【復(fù)制】,再選擇【Copy full XPath】,即可得到xpath。

Selenium入門(二)Java整合Selenium實(shí)現(xiàn)模擬登錄

?


代碼實(shí)現(xiàn)

  • 主要實(shí)現(xiàn)代碼如下:

需要注意的是webDriver的每次響應(yīng)操作都要用sleep()函數(shù)加入一個(gè)時(shí)間間隔。

由于瀏覽器的渲染需要耗費(fèi)一定的時(shí)間,而在程序執(zhí)行時(shí)幾乎是瞬間完成,所以要用sleep()函數(shù)。

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 {
            // 設(shè)置 chromedirver 的存放位置
            System.getProperties().setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions = Common.addArguments(chromeOptions);
            // 實(shí)例化
            webDriver = new ChromeDriver(chromeOptions);
            // 1.模擬打開登陸頁面
            String loginUrl = "http://192.168.1.115:8088/#/login";
            LogUtils.info("打開登錄頁面,地址是{}",loginUrl);
            webDriver.get(loginUrl);
            // 2.等3秒鐘響應(yīng)后再操作,不然內(nèi)容可能還沒有返回
            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.找到登陸的按鈕,并模擬點(diǎn)擊登陸
            WebElement loginButton = webDriver.findElement(By.xpath("/html/body/div/div/div[2]/div[2]/div/form/button"));
            loginButton.click();
            LogUtils.info("開始點(diǎn)擊登錄...");
            Thread.sleep(3000L);

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

    
    /**
     * chrome添加參數(shù)
     * @param options
     * @return
     */
    public static ChromeOptions addArguments(ChromeOptions options){
        options.addArguments("disable-infobars");
        // 瀏覽器不提供可視化頁面. linux下如果系統(tǒng)不支持可視化不加這條會啟動失敗
        options.addArguments("--headless");
        // 啟動無沙盒模式運(yùn)行,以最高權(quán)限運(yùn)行
        options.addArguments("--no-sandbox");

        // 優(yōu)化參數(shù)
        // 不加載圖片, 提升速度
        options.addArguments("blink-settings=imagesEnabled=false");
        options.addArguments("--disable-dev-shm-usage");
        // 禁用gpu渲染
        options.addArguments("--disable-gpu");

        // 禁用阻止彈出窗口
        options.addArguments("--disable-popup-blocking");
        // 禁用擴(kuò)展
        options.addArguments("disable-extensions");
        // 禁用JavaScript
        options.addArguments("--disable-javascript");
        // 默認(rèn)瀏覽器檢查
        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實(shí)現(xiàn)模擬登錄

?上圖我們可以看到登錄后的【Local Storage】和【Session Storage】的內(nèi)容。

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

package org.openqa.selenium.html5;

public interface WebStorage {
    LocalStorage getLocalStorage();

    SessionStorage getSessionStorage();
}

可以看到實(shí)現(xiàn)了LocalStorage和SessionStorage,所以獲取LocalStorage和SessionStorage里的值方法如下:

public static void doSomeThing(WebDriver webDriver){
    // 獲得LocalStorge里的數(shù)據(jù)
    WebStorage webStorage = (WebStorage) new Augmenter().augment(webDriver);
    LocalStorage localStorage = webStorage.getLocalStorage();
    String username = localStorage.getItem("username");
    System.out.println("username:" + username);
    // 獲得SessionStorge里的數(shù)據(jù)
    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);
}

至此功能實(shí)現(xiàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-402877.html

到了這里,關(guān)于Selenium入門(二)Java整合Selenium實(shí)現(xiàn)模擬登錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Python + Selenium 模擬登錄jd

    Python + Selenium 模擬登錄jd

    最近有點(diǎn)時(shí)間,就隨便找點(diǎn)東西弄弄,倒也碰到了一些問題,在此記錄下 Python3.11.3 + selenium4.9.1 + opencv4.7 + PyAutoGUI0.9.54 + windows11 進(jìn)入登錄頁面,登錄方式有兩種,這里直接定位點(diǎn)擊賬號登錄即可 看到驗(yàn)證碼的圖片是base64格式的,可以通過src屬性來獲取,然后直接轉(zhuǎn)成cv圖片格

    2024年02月07日
    瀏覽(15)
  • Java+Selenium+chrome 實(shí)現(xiàn)定時(shí)自動登錄(含驗(yàn)證碼解析)

    Java+Selenium+chrome 實(shí)現(xiàn)定時(shí)自動登錄(含驗(yàn)證碼解析)

    作為打工人,感覺對于定時(shí)自動登錄這個(gè)功能還是需要會,現(xiàn)將方法分享出來,供大家參考。 說明:以chrome瀏覽器為例,其他瀏覽器可以自動查找自己瀏覽器的驅(qū)動,方法相同 進(jìn)入chrome瀏覽器設(shè)置,左側(cè)菜單最后一欄,找到關(guān)于chrome,點(diǎn)開獲取瀏覽器版本號,進(jìn)入 https://r

    2024年02月06日
    瀏覽(17)
  • Python爬蟲-使用Selenium模擬百度登錄

    Python爬蟲-使用Selenium模擬百度登錄

    ? ? 前面我已經(jīng)安裝好了Selenium并模擬成功了一下打開百度頁面并進(jìn)行查詢,讓我這個(gè)python初學(xué)者信心倍增,今天再來試一試百度登錄 把打開百度的代碼放到構(gòu)造方法中 ps:那個(gè)文件目錄是用于后面滑塊驗(yàn)證圖片保存的。 點(diǎn)擊右上角的“登錄”按鈕,打開登錄框, 代碼如下:

    2024年02月06日
    瀏覽(26)
  • python使用selenium模擬登錄網(wǎng)頁頁面

    python使用selenium模擬登錄網(wǎng)頁頁面

    python的selenium用于自動化測試,但是在自動化測試的時(shí)候也可以用來模擬登錄,本次用selenium模擬登錄某DN網(wǎng)頁 代碼如下(示例): 本次使用的是谷歌的內(nèi)核若有需要,也可以換其他瀏覽器的內(nèi)核 首先打開CSDN頁面準(zhǔn)備在頁面中定位元素 為方便操作,直接在開發(fā)者界面中復(fù)制

    2024年02月13日
    瀏覽(22)
  • python+Selenium模擬登錄報(bào)錯(cuò):`InvalidCookieDomainException`

    python+Selenium模擬登錄報(bào)錯(cuò):`InvalidCookieDomainException`

    python+Selenium登錄報(bào)錯(cuò) 錯(cuò)誤信息: InvalidCookieDomainException: invalid cookie domain: Cookie \\\'domain\\\' mismatch (Session info: MicrosoftEdge=110.0.1587.46) 原代碼: 原因: 請看下圖的domain:遮擋部分一致,但前面有的有 www. ,有的沒有: 解決辦法 :修改不一樣的domain,具體以哪個(gè)為主需視情況而定。

    2024年02月07日
    瀏覽(15)
  • 在scrapy 使用selenium模擬登錄獲取cookie

    在scrapy 使用selenium模擬登錄獲取cookie

    前言 最近有一點(diǎn)點(diǎn)爬蟲需求,想總結(jié)一下scrapy框架的一些基本使用方法,加深印象,自己一直習(xí)慣使用一些腳本文件運(yùn)行爬蟲,面對數(shù)據(jù)量非常大,穩(wěn)定性要求比較高的,效率需求比較高的情況下還是用scrapy較為合適,scrapy是一個(gè)異步的框架,所有的請求都是阻塞的,雖然在

    2024年02月11日
    瀏覽(24)
  • 使用selenium模擬登錄解決滑塊驗(yàn)證問題

    目錄 1.登錄入口 2.點(diǎn)擊“賬號密碼登錄” 3.輸入賬號、密碼并點(diǎn)擊登錄 4.滑塊驗(yàn)證過程 5.小結(jié) 本次主要是使用selenium模擬登錄網(wǎng)頁端的TX新聞,本來最開始是模擬請求的,但是某一天突然發(fā)現(xiàn),部分賬號需要經(jīng)過滑塊驗(yàn)證才能正常登錄,如果還是模擬請求,需要的參數(shù)太多了

    2024年02月16日
    瀏覽(18)
  • java + Selenium 實(shí)現(xiàn)自動化測試,模擬人手點(diǎn)擊操作 chrome 瀏覽器

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

    2024年02月11日
    瀏覽(25)
  • Python之selenium,使用webdriver模擬登錄網(wǎng)站(含驗(yàn)證碼)

    Python之selenium,使用webdriver模擬登錄網(wǎng)站(含驗(yàn)證碼)

    前段時(shí)間做了一個(gè)小項(xiàng)目,其中有一段需要自動獲取網(wǎng)站后臺的數(shù)據(jù),但是這個(gè)網(wǎng)站沒有任何提供給開發(fā)者的API,所以只能靠自己去探索。 起初想著用發(fā)送請求的方式去模擬登陸,獲取cookies,從而再獲取網(wǎng)站后臺數(shù)據(jù),但是因?yàn)樽约禾肆艘恍┰颍艞壛诉@個(gè)方法。 后來

    2024年02月02日
    瀏覽(23)
  • Selenium WebDrive使用Edge瀏覽器模擬登錄163郵箱

    ** ** 1.首先要在pycharm中下載好Selenium 2.然后下載瀏覽器驅(qū)動這里是鏈接 (https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/) *注意版本要一致 *注意放置的位置要在python3.7(這里是我用的)的更目錄下也就是找到python文件夾打開后放進(jìn)去有些資料說要改名這里不用因?yàn)镾eleni

    2023年04月15日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包