【发布时间】: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