【问题标题】:Accessing iFrames with Phantomjs Watir使用 Phantomjs Watir 访问 iFrame
【发布时间】:2014-10-27 06:41:51
【问题描述】:

我的脚本正在尝试访问此登录页面:

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>

这是我的代码(Ruby):

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?

并停止脚本。返回“真”:

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

但这就是它的范围。如何使用 phantomjs 和 watir 登录 instagram?

谢谢。

【问题讨论】:

  • 看起来框架正在显示 Facebook 跨域信使助手。您可能需要查看 PhantomJS 是否支持跨域 iframe。
  • 如果 PhantomJS 不这样做会怎样?有没有其他方法可以无头访问 iframe?
  • 你可以试试headless gem。没用过,不知道有什么限制。
  • 嗨贾斯汀,我试图寻找 PhantomJS 是否支持跨域框架,但我找不到任何东西......我只找到了这个。控制 Web 安全 执行跨域 XHR 通常对于某些脚本目的是必要的。现在可以通过禁用网络安全(问题 28)来实现这一点,或者使用 --web-security=no 命令行选项或 webSecurityEnabled 页面设置。
  • 如果我要远程运行我的脚本,它还能工作吗?

标签: javascript ruby iframe phantomjs watir


【解决方案1】:

在你进入页面之前尝试在你的代码中添加这个:

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

【讨论】:

    猜你喜欢
    • 2015-04-04
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2016-12-15
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多