gpt4 book ai didi

javascript - PhantomJS 打开动态重命名框架的问题

转载 作者:行者123 更新时间:2023-12-02 01:39:42 24 4
gpt4 key购买 nike

我正在遍历 iframe 树,但遇到了 PhantomJS 的特定问题。

我正在使用带有最基本的 iframe 示例的本地托管页面。

<div>
frame 0
</div>
<iframe name="1-1" width="500px;height: 500px;" src="frame-1-1.html"></iframe>

这是我通过 PhantomJS 运行的 Javascript 代码。

page.open(url,function(status){

var test = page.evaluate(function(){
var iframes = document.getElementsByTagName('iframe');
var frames = document.getElementsByTagName('frame');

if(iframes.length >0)
{
iframes.item(0).name = 'test1';
return iframes.item(0).name;
}
else if(frames.length > 0)
{
frames.item(0).name = 'test2';
return frames.item(0).name;
}
return "replaced nothing";

});

fs.write('test.txt', page.content, "w");

console.log("test: " + test);
page.switchToFrame(test);
var test2 = page.evaluate(function()
{
return document.getElementsByName('test1')[0].name;
});
console.log(test2);
console.log("||||" + page.frameName);
});

test.txt 示例输出文件包含预期的内容。 html 代码中的“1-1”被替换为“test1”。

变量 test 包含预期的值“test1”

变量 test2 包含预期的值“test1”

但是, page.switchToFrame(test) 没有进入预期的框架。如果此处运行 page.switchToFrame("1-1") ,则页面会切换,忽略之前对 DOM 的更改。

反过来,在当前代码中, page.frameName 不包含任何值,因为框架未切换到内部 iframe。

我错过了什么吗?

最佳答案

我找到了解决此问题的解决方法。

内部:

if(iframes.length >0)
{
iframes.item(0).name = 'test1';
return iframes.item(0).name;
}

else if(frames.length > 0)
{
frames.item(0).name = 'test2';
return frames.item(0).name;
}

如果在返回之前添加:

var outhtml = iframes.item(0).outerHTML;

iframes.item(0).outerHTML = outhtml;

它强制 PhantomJS 内进行某种更新,从而解决问题。最后的 page.frameName 具有正确的值“test1”,并且 test2 变量包含预期的 NULL 值

关于javascript - PhantomJS 打开动态重命名框架的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23877801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com