前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >selenium2java利用mysq解决向浏览器插入cookies时token过期问题

selenium2java利用mysq解决向浏览器插入cookies时token过期问题

作者头像
FunTester
发布2019-08-30 14:31:48
4450
发布2019-08-30 14:31:48
举报
文章被收录于专栏:FunTesterFunTester

本人在学习selenium2java中通过浏览器插入cookies模拟用户登录的时候,发现一个问题,就是token值过期的问题,后来学习了selenium2java连接数据库后找到了一个更好的解决方案。每次插入cookies的时候总是从数据库拿到最新的token,这样就完美解决了过期的问题。

这个是我登录后从浏览器拿到的cookies:

[Automatic_login=18436035355%7Ce3ceb5881a0a1fdaad01296d7554868d%7CStudent; expires=星期二, 21 三月 2017 01:59:55 CST; path=/; domain=www.dz101.com, Hm_lvt_52b97b391587eb6d3e582caa097d6f91=1489471192; expires=星期三, 14 三月 2018 01:59:56 CST; path=/; domain=.dz101.com, MyName=18436035355; expires=星期二, 21 三月 2017 01:59:54 CST; path=/; domain=www.dz101.com, User_token_Session=f24f16d472b222271e6dcf27077231b9; expires=星期二, 21 三月 2017 01:59:54 CST; path=/; domain=www.dz101.com, User_identity_Session=1; expires=星期二, 21 三月 2017 01:59:54 CST; path=/; domain=www.dz101.com, PHPSESSID=1s2uvdrj33d72qvj2qlqojhsl7; path=/; domain=www.dz101.com, Hm_lpvt_52b97b391587eb6d3e582caa097d6f91=1489471196; path=/; domain=.dz101.com]

经过分析和尝试发现,其实只有插入MyName和User_token_Session这两项就可以了。

下面是我成功插入后的cookies:

[Hm_lvt_52b97b391587eb6d3e582caa097d6f91=1489472871; expires=星期三, 14 三月 2018 02:27:53 CST; path=/; domain=.dz101.com, MyName=18436035355; path=/; domain=www.dz101.com, User_token_Session=f24f16d472b222271e6dcf27077231b9; path=/; domain=www.dz101.com, PHPSESSID=uahgb7ll1405h0p5jhloipt7a2; path=/; domain=www.dz101.com, Hm_lpvt_52b97b391587eb6d3e582caa097d6f91=1489472873; path=/; domain=.dz101.com]

下面是我写的代码

代码语言:javascript
复制
//向浏览器添加cookies
public static void addCookies(WebDriver driver, String mobile) throws ClassNotFoundException, SQLException, IOException {
Cookie a = new Cookie("MyName", mobile);
Cookie b = new Cookie("User_token_Session", MySql.getNewToken(mobile));
driver.manage().addCookie(a);
driver.manage().addCookie(b);
driver.navigate().refresh();
//查看浏览器cookies
// Set<Cookie> cooies = driver.manage().getCookies();
// System.out.println(cooies);
}

下面是getNewToken(String mobile))方法:

代码语言:javascript
复制
public static String getNewToken(String mobile) throws ClassNotFoundException, SQLException, IOException {
// 加载驱动程序
Class.forName(driver);
// 连接数据库
Connection conn = DriverManager.getConnection(url, user, password);
if(!conn.isClosed()) 
System.out.println("Succeeded connecting to the Database!");
//statement用来执行SQL语句
Statement statement = conn.createStatement();
// 要执行的SQL语句
String sql = "select * from users where mobile = "+ mobile;
            output(sql);
// 结果集
ResultSet rs = statement.executeQuery(sql);
            System.out.println("查询结果如下所示:");
            String id = null;
            while(rs.next()) {
            // 选择列数据
            id = rs.getString("id");
            // 输出结果
            System.out.println(rs.getString("id") + "\t" + id);
            }
            rs.close();
            String sql2 = "select * from users_token where uid = "+ id + " ORDER BY create_time DESC LIMIT 1";
            ResultSet rs2 = statement.executeQuery(sql2);
            String token = null;
            System.out.println("查询结果如下所示:");
            while(rs2.next()){
            token = rs2.getString(token);
            output(token);
            saveToFile(getNow() + token, "runlog.log", false);
            }
            conn.close();
            return token;
}

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档