本人在学习selenium2java中通过浏览器插入cookies模拟用户登录的时候,发现一个问题,就是token值过期的问题,后来学习了selenium2java连接数据库后找到了一个更好的解决方案。每次插入cookies的时候总是从数据库拿到最新的token,这样就完美解决了过期的问题。
这个是我登录后从浏览器拿到的cookies:
[Automatic_login=18436035355%7Ce3ceb5881a0a1fdaad01296d7554868d%7CStudent; expires=星期二, 21 三月 2017 01:59:55 CST; path=/;
domain= 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= User_token_Session=f24f16d472b222271e6dcf27077231b9; expires=星期二, 21 三月 2017 01:59:54 CST; path=/;
domain= User_identity_Session=1; expires=星期二, 21 三月 2017 01:59:54 CST; path=/;
domain= PHPSESSID=1s2uvdrj33d72qvj2qlqojhsl7; path=/; domain= 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= User_token_Session=f24f16d472b222271e6dcf27077231b9; path=/;
domain= PHPSESSID=uahgb7ll1405h0p5jhloipt7a2; path=/;
domain= Hm_lpvt_52b97b391587eb6d3e582caa097d6f91=1489472873; path=/; domain=.dz101.com]
下面是我写的代码
1//向浏览器添加cookies
2public static void addCookies(WebDriver driver, String mobile) throws ClassNotFoundException, SQLException, IOException {
3Cookie a = new Cookie("MyName", mobile);
4Cookie b = new Cookie("User_token_Session", MySql.getNewToken(mobile));
5driver.manage().addCookie(a);
6driver.manage().addCookie(b);
7driver.navigate().refresh();
8//查看浏览器cookies
9// Set<Cookie> cooies = driver.manage().getCookies();
10// System.out.println(cooies);
11}
下面是getNewToken(String mobile))方法:
1public static String getNewToken(String mobile) throws ClassNotFoundException, SQLException, IOException {
2// 加载驱动程序
3Class.forName(driver);
4// 连接数据库
5Connection conn = DriverManager.getConnection(url, user, password);
6if(!conn.isClosed())
7System.out.println("Succeeded connecting to the Database!");
8//statement用来执行SQL语句
9Statement statement = conn.createStatement();
10// 要执行的SQL语句
11String sql = "select * from users where mobile = "+ mobile;
12 output(sql);
13// 结果集
14ResultSet rs = statement.executeQuery(sql);
15 System.out.println("查询结果如下所示:");
16 String id = null;
17 while(rs.next()) {
18 // 选择列数据
19 id = rs.getString("id");
20 // 输出结果
21 System.out.println(rs.getString("id") + "\t" + id);
22 }
23 rs.close();
24 String sql2 = "select * from users_token where uid = "+ id + " ORDER BY create_time DESC LIMIT 1";
25 ResultSet rs2 = statement.executeQuery(sql2);
26 String token = null;
27 System.out.println("查询结果如下所示:");
28 while(rs2.next()){
29 token = rs2.getString(token);
30 output(token);
31 saveToFile(getNow() + token, "runlog.log", false);
32 }
33 conn.close();
34 return token;
35}
原文作者:FunTester;如有侵权,请联系管理员删除。