phantomjs是从espn网站获取数据的好方法吗?

时间:2016-01-02 23:53:16

标签: phantomjs

我正在尝试构建一个从我的幻想体育联盟获取数据的网络工具,以便进一步分析。 为此,我的工具需要使用espn登录页面登录: http://games.espn.go.com/ffl/signin 不幸的是,ESPN摆脱了他们的API。

我试图在这里使用各种.NET webbrowser控件(最后一个是GeckoFX)但是无法使它工作。

问题:

  • 页面DOM是动态创建的,所有登录控件都添加到iframe元素。因此,在.NET代码中找不到它们是不可能的。我设法通过将javascript注入页面找到了解决方案。该脚本找到了所有控件(仅使用输入控件列表,因为没有附加ID)并设置登录数据,然后单击按钮。
  • 登录然后失败,因为该页面是使用AngularJS构建的,并且模型没有注意到我的更改。

经过多次尝试后,我放弃了这种方式并开始寻找其他东西。我得到的一个建议是尝试PhantomJS。 我已经知道它可以使用角度页面,但仍然无法解决动态dom操作的问题。

  • 当我尝试 document.getElementsByName 时 - 我从登录控件中得不到任何内容,因为文档似乎只保留了初始页面结构
  • 我知道我可以使用 page.content ,但看起来它只是一个字符串,无法从中获取元素。

我是否错过了该问题的现有解决方案? 或者我可以在这里使用其他一些技术吗?

我知道其他人尝试过使用python / selenium Logging into ESPN using Selenium 但我在那个区域完全是绿色的,并且不知道我的托管是否适合这样的解决方案,所以更喜欢使用.NET / js。

提前感谢您的帮助!

修改的 这是我尝试过的代码示例:

page.open('http://games.espn.go.com/ffl/signin', function(status) {
if (status !== 'success') {
    console.log('Unable to access network');
  } else {
    var ua = page.evaluate(function() {

      var inputs = document.getElementsByTagName('iframe');
      //this one will return 0
      var numberOfInputControls = inputs.length;

      // and this will contain what I need but it's just a string
      var sourceWithChangedDOM = page.content;
      });
}
phantom.exit();
});

0 个答案:

没有答案