我正在尝试登录我的富国银行帐户并查看我的交易历史记录,以便我可以使用它们来跟踪我的财务状况.如果我可以访问页面的HTML,我可以执行抓取部分.我遇到的问题是到达那里,下面的代码给我带来了很多胡言乱语.
####Bring in BeautifulSoup and urllib. import bs4 import urllib.request import requests ####Navigate to the website. url = 'https://connect.secure.wellsfargo.com/auth/login/do' payload = {"j_username":"USERNAME", "j_password":"PASSWORD"} r = requests.post(url, payload) print(r.text)
此代码输出以下内容:
我为可怕的格式道歉,但我不知道如何处理它.另外,为了长度的缘故,我在中间删除了一个用星号代替的大的任意部分.
对我而言,我看到的关键是"请启用JavaScript以查看页面内容." 这个输出实际上是JS吗?我如何处理Python的任何内容?我根本不知道这告诉我什么,我非常感谢你能提供的任何帮助.
谢谢.
我知道已经花了很多时间,但我可以在这里给出一些关闭.您所看到的是由F5 Networks,Inc.的优秀人员销售的机器人失败代码,旨在防止天真的网络浏览器和抓取工具访问使用它的网站.
简而言之,这是混淆的Javascript,它通过一系列迭代步骤来计算值,这些步骤执行各种特定于浏览器的Javascript功能,并利用一些相当粗鲁的Javascript语言行为.该值将作为cookie发送回Wells Fargo,并作为导航所需的部分网络表单.只使用无头浏览器不会削减它 - 计算中有一些技巧专门用于对抗无头浏览器和与它们一起使用的Javascript引擎.错过任何技巧都不会导致任何失败; 相反,它会以一种让你难以辨别错过的方式抛弃最终结果.
从理论上讲,它可以破译代码并用您选择的语言模拟所有计算; 我知道数据汇总公司写的一个成功的对策,但该代码不公开供公众阅读.或者,您可以在JS解释器中找出正确执行它所需的内容.我不记得所有的细节,但它比看起来容易.您无需对整个工程进行逆向工程,只需在正确的环境中运行即可.您需要一个虚拟窗口对象和更多的虚拟对象,无论代码正在寻找什么,例如您的环境中的navigator.userAgent,还有其他东西.
出于实际目的,编写对策可能不值得.如果您是一个组织,请要列入白名单.
如果你有兴趣的挑战,这里是一个(也许明显)的起点-乱码的长串eval((ie9rgb4=function (){var m='function ()
... .slice
...一部分被加密的代码.紧随其后的for循环包含字符转换.您可以复制在该循环中执行的操作以解密第一级混淆.在调试器处于活动状态的情况下,通过普通浏览器登录该站点,观察发送的请求和cookie,以了解您正在寻找的最终目标,并尝试将其与您看到的JS代码相关联.
您可能还会发现以下值的映射在某些方面很有用:
{"$$$", "7"}, {"$$$$", "f"}, {"$$$_", "e"}, {"$$_", "6"}, {"$$_$", "d"}, {"$$__", "c"}, {"$_", "constructor"}, {"$_$", "5"}, {"$_$$", "b"}, {"$_$_", "a"}, {"$__", "4"}, {"$__$", "9"}, {"$___", "8"}, {"_", "u"}, {"_$", "o"}, {"_$$", "3"}, {"_$_", "2"}, {"__", "t"}, {"__$", "1"}, {"___", "0"}