使用Mechanize获取JavaScript变量

我想从head > script > var token https://admin.booking.com/hotel/hoteladmin获取一个JavaScript变量。

在此处输入图像描述

我不知道浏览器如何设置此变量,因为当我从Mechanize获取此页面时,我得到:

 var token = '' || 'empty-token', 

这是我用来获取此页面的代码:

 login_url = "https://admin.booking.com/hotel/hoteladmin" agent = Mechanize.new agent.verify_mode= OpenSSL::SSL::VERIFY_NONE page = agent.get(login_url) 

如果您想通过mechanize / watir中的JavaScript访问此令牌,您还需要能够使用浏览器开发人员工具访问它。

不幸的是,变量本身被包含在范围内,这使得无法像这样访问它。 在这篇优秀文章中,您可以阅读JS中有关许多不同类型的范围的更多信息: JavaScript中的变量范围是什么?

现在回答你的问题。 当然,有可能提取令牌本身,但你必须以肮脏的方式进行。 您将不得不等待直到所有JS在页面上执行,然后获取文档正文并以某种方式提取它 – 一种方式可能是RegExp。

编辑:Mechanize根据其他一些答案在SO上执行不执行JS,这就是为什么你需要一个驱动浏览器的gem(watir是一个很好的例子),但这会让我们回到上面描述的问题。