【发布时间】:2016-04-04 13:16:43
【问题描述】:
我正在尝试切换 DOM 中的所有 iframe:
var frames = driver.FindElements(By.TagName("iframe"));
foreach (var frame in frames) {
driver.SwitchTo().Frame(frame);
//Do stuff then switch back to default content
}
某些 Google 广告安全框架在切换时会抛出此异常:
“JSON 解析错误:未终止的字符串”
我希望 Selenium 在切换到框架时将内容读取为 HTML 而不是 JSON。
Google 广告 safeframe 我正在尝试切换到:
<iframe name="1-0-2;63563;<!doctype html><html><head><style><!--a:link { color: #000000 }a:visited { color: #000000 }a:hover { color: #000000 }a:active { color: #000000 } --></style><script><!--(function(){var b=this;var f=String.prototype.trim?function(a){return a.trim()}:function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},m=function(a,c){return a<c?-1:a>c?1:0};var n;a:{var p=b.navigator;if(p){var q=p.userAgent;if(q){n=q;break a}}n=""};var r=-1!=n.indexOf("Opera")||-1!=n.indexOf("OPR"),t=-1!=n.indexOf("Trident")||-1!=n.indexOf("MSIE"),u=-1!=n.indexOf("Edge"),v=-1!=n.indexOf("Gecko")&&!(-1!=n.toLowerCase().indexOf("webkit")&&-1==n.indexOf("Edge"))&&!
iFrame HTML 被缩短,因为 name 属性包含 iframe DOM,超过 60,000 个字符。
任何人都知道如何让 Selenium 切换到这些谷歌广告安全框架?
【问题讨论】:
-
您能分享您正在使用的网页的链接吗?谢谢。
-
由于广告循环的性质,这很困难,但是 express.co.uk 通常在每次刷新时都会在其中显示一个安全框架广告。使用顶层属性 data-is-safeframe="true" 制作的安全框广告。我认为值得一提的是,与 Selenium 不同,FireBug 解析这些安全帧没有问题。
-
谢谢,尝试在 express.co.uk 页面上从一个框架切换到另一个框架。没有遇到任何问题。只是在黑暗中拍摄 - 检查您是否使用最新的 selenium 和 firefox 版本。任何其他附加信息也可以提供帮助。
-
您好,感谢您的测试。我正在使用最新的驱动程序(2.53)但是我应该提到我正在使用 Phantomjs。我会用FF再次测试并报告。
-
好的,谢谢,顺便说一句,您使用的是哪个 PhantomJS 版本?
标签: c# selenium iframe phantomjs