当前位置: 首页 > article >正文

selenium获取登录token

背景

新到一个需求需要用爬虫采集数据,但这个采购的系统登录做了加密,我也懒得研究前端代码了,于是考虑用selenium来获取用户token做处理。

下载webdriver

由于我开发机器使用的chorme,因此下载的chorme webdriver,地址如下:
webdriver
有一个坑爹的地方在于chorme会自动更新,而webdriver的版本必须跟chorme的版本匹配,因此生产环境我是安装的Chromium,它就不会自动更新了哈哈哈哈。

代码

package com.spider;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.net.URISyntaxException;

public class SyncDataTask {

    public String getAuthToken() throws InterruptedException, URISyntaxException, IOException {
    	//注意这里替换成你对应的地址 比如我的是/Users/xxxx/lib/chromedriver
        System.getProperties().setProperty("webdriver.chrome.driver", "替换成webdriver地址");

        ChromeOptions options = new ChromeOptions();
        options.addArguments("--disable-blink-features=AutomationControlled");
        //1、1解决403错误
        options.addArguments("--remote-allow-origins=*");
        //3、关闭左上方Chrome 正受到自动测试软件的控制的提示
        options.setExperimentalOption("useAutomationExtension", false);
        // 1.创建webdriver驱动
        WebDriver driver = new ChromeDriver(options);
        // 2.打开首页
        driver.get("https://xxxxx.com");
        Thread.sleep(1000);
        //输入账号密码
        driver.findElement(By.className("user-name")).sendKeys("account");
        driver.findElements(By.className("ant-input-lg")).get(1).sendKeys("password");
        //点击登录
        driver.findElement(By.className("login-refactoring-btn")).click();
        Thread.sleep(5000L);
        String token = getItemFromLocalStorage("token", driver);
        log.info("token:{}", token);
        driver.quit();
        return JSONObject.parseObject(token).getString("access_token");
    }

    public static String getItemFromLocalStorage(String key, WebDriver driver) {
        JavascriptExecutor js = ((JavascriptExecutor) driver);
        return (String) js.executeScript(String.format("return window.localStorage.getItem('%s');", key));
    }
}


http://www.kler.cn/a/515199.html

相关文章:

  • 网络(一)
  • 【动态规划】落花人独立,微雨燕双飞 - 8. 01背包问题
  • Idea调试的时候字符串路径乱码 poi解析时表单中文名字正确,但是找不到
  • Swift语言的学习路线
  • 【16届蓝桥杯寒假刷题营】第1期DAY5
  • C语言——文件操作
  • Android系统开发(一):AOSP 架构全解析:开源拥抱安卓未来
  • postgresql15的停止
  • s/jwt-decode.js?v=534c014e‘ vue3引入jwt-decode报错
  • 电子应用设计方案101:智能家庭AI喝水杯系统设计
  • 群晖部署-Calibreweb
  • Windows系统提示RunDLL PcaWallpaperAppDetect错误修复方法
  • 新浪安卓(Android)开发面试题及参考答案(68道题,9道手撕题)
  • 人工智能学习(二)之Python 科学计算库
  • SSM开发(二) MyBatis两种SQL配置方式及其对比
  • 三篇物联网漏洞挖掘综述
  • 操作无法完成,因为文件已经在Electronic Team Virtual Serial Port Driver Service中打开
  • 软件测试 —— Postman初识
  • 最新-CentOS 7安装1 Panel Linux 服务器运维管理面板
  • JS学习之JavaScript模块化规范进化论
  • “模板”格式化发布新创诗(为《诗意 2 0 2 5》贡献力量)
  • 2024年美赛C题评委文章及O奖论文解读 | AI工具如何影响数学建模?从评委和O奖论文出发-O奖论文做对了什么?
  • 【论文速读】| 评估并提高大语言模型生成的安全攻击探测器的鲁棒性
  • 【网络协议】RFC1350-TFTP协议
  • Java设计模式 十三 代理模式 (Proxy Pattern)
  • SQLmap 注入-03 获得用户信息