公告:1)网站程序升级:Q2A升级到1.8.6,Wordpress升级到5.7.2
2)修复了头像加载慢与提交问题反应慢等问题
2021-06-16

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
2.6k 浏览

目的:想使用URLFetch登录网站

版本:mathematica11

看网站的登录界面,form表单里有四个要提交的

通过抓包,看post的情况

用mathematica实现

URLFetch["https://bbs.byr.cn/index",
 Method -> "POST", 
 "Parameters" -> {"id" -> "xxx", "passwd" -> "xxx", "mode" -> "0", 
   "CookieDate" -> "0"}]

但是仍然是不能成功登录。

 

应该如何做,才能登录上去。

分类:其它 | 用户: WMN7 (606 分)
首先,你用的登录地址不对。
其次,URLFetch已经是旧函数了,在版本11中应该使用HTTPRequest与URLRead等函数代替。
最后,能提供一个测试账号么?貌似只有北邮师生可以注册论坛。

1个回答

+4 投票

这个网站我试了两下,都没有反应,没搞定。

下面是我之前常用的两种方案,希望能抛砖引玉:

方案一:通过密码直接登录(例:登录博士数学论坛)

(*登录地址,这个地址可以通过浏览器的开发者工具获取,也可以通过抓包工具(Fiddler或Wireshark)获取*)
url = "http://www.math.org.cn/member.php?mod=logging&action=login&\
loginsubmit=yes&loginhash=LFbyj";
(*存储Cookie*)
$CookieStore = Automatic;
(*提交登录信息,这里的参数名称获取方式和上面一样,也可以通过HTML中表单查看*)
hr = HTTPRequest[
   url, {Method -> "POST", 
    "Body" -> {"username" -> "你的用户名", "password" -> "你的密码", 
      "cookietime" -> "2592000"}}];
(*返回响应结果*)
response = URLRead[hr, {"StatusCode", "Cookies", "Headers", "Body"}];

方案二:通过Cookie登录(例:登录知乎)

(*先通过火狐浏览器登录自己的知乎账号*)
(*连接数据库*)
Needs["DatabaseLink`"];
conn = OpenSQLConnection[
   JDBC["SQLite", 
    First[FileNames["cookies.sqlite", 
      ParentDirectory[$UserBaseDirectory] <> 
       "\\Mozilla\\Firefox\\Profiles\\", Infinity]]]];

(*得到知乎的Cookies*)
c = SQLExecute[conn, 
   "select * from moz_cookies where baseDomain like '%zhihu.com'"];
(*改成Assoc形式,有些字段去掉了,如果需要再自己加上*)
ca = <|"Domain" -> #[[-3]], "Name" -> #[[2]], "Content" -> #[[3]], 
     "Path" -> #[[-2]], "ExpirationDate" -> #[[-1]]|> & /@ 
   c[[;; , {2, 4, 5, 6, 7, 8}]];

(*好了,已经可以返回登录的信息了,网页的HTML源代码*)
URLRead["https://www.zhihu.com", "Body", 
 VerifySecurityCertificates -> True, {"Cookies" -> ca}, 
 CharacterEncoding -> "UTF-8"]

 

用户: 野鹤 (5.1k 分)
嗯,这句话不太明白->FileNames["cookies.sqlite", ParentDirectory[$UserBaseDirectory] <>
  "\\Mozilla\\Firefox\\Profiles\\", Infinity],请问若是我用其他浏览器登录了知乎应该从哪里找这个路径呢?另外SQLExecute那句是做了什么呢?
不同浏览器处理Cookie是存在差异的。火狐浏览器和IE浏览器比较好处理,火狐浏览器的Cookie保存在SQLite数据库中,IE浏览器的Cookie保存在临时文件中。而Chrome浏览器(包括国内一些使用此内核的浏览器)不好处理,它的Cookie也是存在SQLite数据库中的,但值是用Windows的CryptProtectData函数加密的,解密需要用到CryptUnprotectData。
考虑到写程序简便,上面以火狐浏览器为例,其中SQLExecute是用来执行数据库查询语句的。
至于Cookie存储路径,不同浏览器,不同系统都有差异,最好从网上查一下。
谢谢老哥,我再查一下。
...