selenium获取登录token

news/2025/1/23 22:17:09/

背景

新到一个需求需要用爬虫采集数据,但这个采购的系统登录做了加密,我也懒得研究前端代码了,于是考虑用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/chromedriverSystem.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.ppmy.cn/news/1565595.html

相关文章

Mysql面试题----为什么B+树比B树更适合实现数据库索引

数据存储结构 B 树:每个节点既存储键值,也存储数据记录的指针。这种存储方式使得每个节点存储的键值数量相对较少,因为还要为指针留出空间。当数据量较大时,树的高度会相对较高,导致查询时需要更多的磁盘 I/O 操作来遍…

Django项目的创建及运行——Django学习日志(一)

1.命令行创建 (1)创建项目 django-admin startproject HelloWorld(这里的名称任意) (2)创建应用(app) 首先要进入到项目目录,比如我这里的项目目录为HelloWorld cd …

【Redis】在Java中以及Spring环境下操作Redis

Java环境下&#xff1a; 1.创建maven 项目 2.导入依赖 <!-- redis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.2</version></dependency> 此处使用的是Jedis&…

Spring 定时任务:@Scheduled 注解四大参数解析

本文主要介绍了在 Spring 框架中使用Scheduled注解实现定时任务的方法&#xff0c;重点讲解了fixedRate、fixedDelay、cron和initialDelay这四个参数的用法&#xff0c;并通过实例代码进行了详细说明。 1. fixedRate 参数 参数含义 fixedRate指定任务固定时间间隔执行。如设…

51单片机(三) UART协议与串口通信实验

几个问题 串行通信与并行通信的优缺点。 串行通信传输线少&#xff0c;占用引脚资源少&#xff0c;长距离传输时成本低&#xff0c;但通信控制更加复杂&#xff0c;速度比并行要慢。 并行通信占用引脚资源多&#xff0c;长距离成本高&#xff0c;但速度快。 什么是比特率&…

前沿技术对比:大模型技术为什么发展远快于区块链技术,中英对照解释

文章目录 前言1、技术复杂性与成熟度 / Technical Complexity and Maturity2.、应用场景与行业需求 / Application Scenarios and Industry Demand3、监管与法律问题 / Regulatory and Legal Issues4、去中心化与网络效应 / Decentralization and Network Effects5、能源消耗与…

Windows 配置 Tomcat环境

Windows配置Tomcat 1. 介绍 Tomcat是一个开源的、轻量级的Java应用服务器&#xff0c;在Java Web开发领域应用广泛。以下是关于它的详细介绍&#xff1a; 一、基本概念与背景 定义&#xff1a;Tomcat是Apache软件基金会&#xff08;Apache Software Foundation&#xff09;下…

高效安全文件传输新选择!群晖NAS如何实现无公网IP下的SFTP远程连接

文章目录 前言1. 开启群晖SFTP连接2. 群晖安装Cpolar工具3. 创建SFTP公网地址4. 群晖SFTP远程连接5. 固定SFTP公网地址6. SFTP固定地址连接 前言 随着远程办公和数据共享成为新常态&#xff0c;如何高效且安全地管理和传输文件成为了许多人的痛点。如果你正在寻找一个解决方案…