2014-09-02 89 views
4

我的脚本访问的iFrame试图访问这个登录页面:与Phantomjs的Watir

http://instagram.com/accounts/login

与PhantomJS,的Watir。

登录页面的问题是,登录文本框在一个iFrame:

<iframe class="hiFrame" data-reactid=".0.0.0.1.0.1.0.0.$frame" src="https://instagram.com/accounts/login/ajax/?targetOrigin=https%3A%2F%2Finstagram.com" scrolling="no" seamless=""> 
    #document 
    <!DOCTYPE html> 
    <html class="hl-en not-logged-in " lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
    <head></head> 
    <body class="LoginFormChrome "> 
     <div class="LoginFormPage" data-reactid=".0"> 
     <form data-reactid=".0.0"> 
      <p class="lfField" data-reactid=".0.0.0"> 
      <label class="lfFieldLabel" data-reactid=".0.0.0.0"></label> 
      <input class="lfFieldInput" type="text" data-reactid=".0.0.0.1" value="" autocorrect="false" autocapitalize="false" maxlength="30" name="username"></input> 
      </p> 
      <p class="lfField" data-reactid=".0.0.1"></p> 
      <p class="lfActions" data-reactid=".0.0.2"></p> 
     </form> 
     </div> 
     <div id="fb-root" class=" fb_reset"></div> 
    </body> 
    </html> 
</iframe> 

这里是我的代码(红宝石):

B.goto HOME_URL + LOGIN 
sleep(5)    
puts B.iframe(:class => "hiFrame").text_field(:name => "username").exists? 
B.iframe(:class => "hiFrame").text_field(:name => "username").set USERNAME 
B.iframe(:class => "hiFrame").text_field(:name => "password").set PW 
#puts B.iframe(:class => "hiFrame").text_field(:name => "username").exists? 
B.iframe(:class => "hiFrame").button.click 

作品使用Firefox浏览器完全正常,但当我切换到Phantomjs时,它不识别

B.iframe(:class => "hiFrame").text_field(:name => "username").exists? 

并停止脚本。返回“true”为:

B.iframe(:class => "hiFrame").exists? 

但这就是它的程度。我如何使用phantomjs和watir登录到instagram?

谢谢。

+0

它看起来像框架显示Facebook的跨域信使助手。您可能需要了解PhantomJS是否支持跨域iframe。 – 2014-09-03 16:39:39

+0

如果PhantomJS没有,会发生什么?有没有其他方法可以无界限地访问iframe? – 2014-09-03 21:08:47

+0

你可以试试[headless gem](http://watirwebdriver.com/headless/)。我没有使用它,所以不知道它的局限性。 – 2014-09-03 21:34:35

回答

0

尝试添加该在你的代码,你去页面之前:

B = Watir::Browser.new :phantomjs 
B.window.resize_to(800, 600) 

如果你设置的窗口大小它应该工作。 Phantomjs通常需要指定浏览器大小。

B.window.resize_to(800, 600) 
B.goto HOME_URL + LOGIN 
sleep(5)    
puts B.iframe(:class => "hiFrame").text_field(:name => "username").exists? 
B.iframe(:class => "hiFrame").text_field(:name => "username").set USERNAME 
B.iframe(:class => "hiFrame").text_field(:name => "password").set PW 
#puts B.iframe(:class => "hiFrame").text_field(:name => "username").exists? 
B.iframe(:class => "hiFrame").button.click