公司项目代码中有对网页进行截图并识别的。但是因为网站都比较特殊,几乎都有弹窗,这样就影响到了算法同学的识别效果。
公司开始把这个问题分配给我时,也没什么思路,搁置了几天后要了些弹窗网站,F12打开后定位到弹窗元素,然后点击关闭弹窗,发现元素有个属性变为了none。
拿CSDN网站做个演示吧!这是定位到弹窗的元素上有个style的属性,可以看到display:block
当我们把它改为none后,效果如下:
可以看到登陆的弹窗消失,留下了一层阴影图层(类似于ps图层道理),继续定位到阴影图层上修改掉style到属性值,效果图如下:
看到这里的时候就会有个问题,我怎么去定位知道最顶层图层的定位元素呢?
在请教了前端同学后知道有个属性z-index可以区别出顶层图层,大家可以看上边的图中都有个z-index属性一个值是10000,一个是9999,这些都是前端程序员写上去的,为了让弹窗可以在最顶层。好了,思路有了,就差实现了。(这里也有个小问题后边会提到)
首先我们得找到所有的标签,并将标签中有zindex属性的标签存起来,
然后上边也说了弹窗都有个共性就是其zindex值都很大,你忍一下。所以我们需要对数组根据zindex的值做个排序,如下:
然后我们就可以把值大的标签的style属性进行修改了,也就是这里会有上边提到的问题了,这个修改最大值最大值怎么确定?
因为这些值都是根据程序员个人喜好写上去的,所以如果最大值判断不当那可能整个页面都没了或者关不掉弹窗,经过一批网站的测试最后的判断值如下:
最后,虽然这个方案不是最好的,但是也能解决大部分网站的弹窗问题,自己也不是写前端的,欢迎大佬提供更好的代码思路。
请参考 github 网址[1]
参考文献
[1]
github 网址: https://github.com/vvanglro/browser-popup
请关注微信公众号【未闻Code】获取更多精彩文章。