Watir:为 JavaScript 关闭网络安全
Watir: Turn web security off for JavaScript
使用Watir,我可以访问页面iframe的方法:
browser.iframes.map(&:contentwindow)
# => ["", "", ""]
如果我使用 javascript(在我执行 Watir 代码的同一上下文中),我将被阻止(对于所有 iframe):
script =<<-ENDHEREDOC
var i = 1;
var iframes = document.querySelectorAll('iframe');
all = [];
for (i = 0; i < iframes.length; i++) {
all.push(iframes[i].contentWindow);
}
return all;
ENDHEREDOC
elements = browser.execute_script(script)
Selenium::WebDriver::Error::NoScriptResultError: move target out of
bounds: Blocked a frame with origin "https://my_site.atlassian.net" from accessing a cross-origin frame.
我想 Watir,就像 phantomjs 一样,必须有类似 web-security
的选项,默认情况下设置为 false。然后,似乎 运行 脚本的安全性再次开启。是否也可以为脚本关闭安全性?
对于Chrome,同源策略可以是disabled using the --disable-web-security argument。要将此参数从 Watir 传递给 Chromedriver,您可以这样做:
browser = Watir::Browser.new :chrome, args: %w[--disable-web-security]
或者:
browser = Watir::Browser.new :chrome, options: {args: %w[--disable-web-security]}
使用Watir,我可以访问页面iframe的方法:
browser.iframes.map(&:contentwindow)
# => ["", "", ""]
如果我使用 javascript(在我执行 Watir 代码的同一上下文中),我将被阻止(对于所有 iframe):
script =<<-ENDHEREDOC
var i = 1;
var iframes = document.querySelectorAll('iframe');
all = [];
for (i = 0; i < iframes.length; i++) {
all.push(iframes[i].contentWindow);
}
return all;
ENDHEREDOC
elements = browser.execute_script(script)
Selenium::WebDriver::Error::NoScriptResultError: move target out of
bounds: Blocked a frame with origin "https://my_site.atlassian.net" from accessing a cross-origin frame.
我想 Watir,就像 phantomjs 一样,必须有类似 web-security
的选项,默认情况下设置为 false。然后,似乎 运行 脚本的安全性再次开启。是否也可以为脚本关闭安全性?
对于Chrome,同源策略可以是disabled using the --disable-web-security argument。要将此参数从 Watir 传递给 Chromedriver,您可以这样做:
browser = Watir::Browser.new :chrome, args: %w[--disable-web-security]
或者:
browser = Watir::Browser.new :chrome, options: {args: %w[--disable-web-security]}