webBrowser上模拟登陆成功后 程序打开浏览器同一页面后保留登陆状态

尐孑 2018-05-30 10:00:44
webBrowser上模拟登陆一个网站,成功后,在后台打开浏览器后,浏览器上保留登陆状态。

现在能模拟登陆成功
 List<Cookie> TempCookies = GetAllCookies(cc);
foreach (Cookie i in TempCookies.ToArray())
{
InternetSetCookie("http://xxx.com", i.Name.ToString(), i.Value.ToString() + "+;expires=Sun,22-Feb-2029 00:00:00 GMT");
}
Process.Start("http://xxx.com");
return true;

这样在浏览器打开后 浏览器上就没有登陆状态了。
...全文
928 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljlkk 2018-06-29
  • 打赏
  • 举报
回复
引用 2 楼 qq_22808987 的回复:
public static bool StartIE(CookieContainer cc, string url)
{
try
{
List<Cookie> TempCookies = GetAllCookies(cc);
foreach (Cookie i in TempCookies.ToArray())
{
InternetSetCookie("http://news.4399.com/hxjy/", i.Name.ToString(), i.Value.ToString() + "+;expires=Sun,22-Feb-2029 00:00:00 GMT");
}
Process.Start("http://news.4399.com/hxjy/");
return true;
}
catch { return false; }
}
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

public static List<Cookie> GetAllCookies(CookieContainer cc)
{
List<Cookie> lstCookies = new List<Cookie>();
Hashtable table = (Hashtable)cc.GetType().InvokeMember("m_domainTable",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField |
System.Reflection.BindingFlags.Instance, null, cc, new object[] { });
foreach (object pathList in table.Values)
{
SortedList lstCookieCol = (SortedList)pathList.GetType().InvokeMember("m_list",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField
| System.Reflection.BindingFlags.Instance, null, pathList, new object[] { });
foreach (CookieCollection colCookies in lstCookieCol.Values)
foreach (Cookie c in colCookies) lstCookies.Add(c);
}
return lstCookies;
}
请问 这个要怎么 使用啊, 我现在有个需求,客户有很多个系统,每个登陆嫌太麻烦,想在我们的系统做个链接,点击就能打开新网页并进入主页面。账号密码已提供。
我们这边主要是python django 。 我的思路也是 先用python模拟登录, 拿到cookie, 然后带着cookie 请求目标系统页面, 现在也是实现了模拟登录, 也就是不需要用户看到login页面, 不需要用户输入帐号密码,但现在问题卡在 怎么带着cookie 请求目标系统页, 并用浏览器打开这个目标页。
我不会JAVA ,但是我看你上边的代码,感觉就是我想要的功能。 请问 您的代码要怎么调用?能否举例说明, 感谢
尐孑 2018-05-30
  • 打赏
  • 举报
回复
高手在哪里
尐孑 2018-05-30
  • 打赏
  • 举报
回复
还有别的方法吗
An_1002 2018-05-30
  • 打赏
  • 举报
回复
Mark 一下
楠北&东西 2018-05-30
  • 打赏
  • 举报
回复
public static bool StartIE(CookieContainer cc, string url) { try { List<Cookie> TempCookies = GetAllCookies(cc); foreach (Cookie i in TempCookies.ToArray()) { InternetSetCookie("http://news.4399.com/hxjy/", i.Name.ToString(), i.Value.ToString() + "+;expires=Sun,22-Feb-2029 00:00:00 GMT"); } Process.Start("http://news.4399.com/hxjy/"); return true; } catch { return false; } } [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData); public static List<Cookie> GetAllCookies(CookieContainer cc) { List<Cookie> lstCookies = new List<Cookie>(); Hashtable table = (Hashtable)cc.GetType().InvokeMember("m_domainTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, cc, new object[] { }); foreach (object pathList in table.Values) { SortedList lstCookieCol = (SortedList)pathList.GetType().InvokeMember("m_list", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, pathList, new object[] { }); foreach (CookieCollection colCookies in lstCookieCol.Values) foreach (Cookie c in colCookies) lstCookies.Add(c); } return lstCookies; }
楠北&东西 2018-05-30
  • 打赏
  • 举报
回复
楼上方法是正确的

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧