Python 調用瀏覽器時如何用 JS 去彈窗?
公司項目代碼中有對網頁進行截圖並識別的。但是因爲網站都比較特殊,幾乎都有彈窗,這樣就影響到了算法同學的識別效果。
公司開始把這個問題分配給我時,也沒什麼思路,擱置了幾天後要了些彈窗網站,F12 打開後定位到彈窗元素,然後點擊關閉彈窗,發現元素有個屬性變爲了 none。
拿 CSDN 網站做個演示吧!這是定位到彈窗的元素上有個 style 的屬性,可以看到 display:block
當我們把它改爲 none 後,效果如下:
可以看到登陸的彈窗消失,留下了一層陰影圖層 (類似於 ps 圖層道理),繼續定位到陰影圖層上修改掉 style 到屬性值,效果圖如下:
看到這裏的時候就會有個問題,我怎麼去定位知道最頂層圖層的定位元素呢?
在請教了前端同學後知道有個屬性 z-index 可以區別出頂層圖層,大家可以看上邊的圖中都有個 z-index 屬性一個值是 10000,一個是 9999,這些都是前端程序員寫上去的,爲了讓彈窗可以在最頂層。好了,思路有了,就差實現了。(這裏也有個小問題後邊會提到)
首先我們得找到所有的標籤,並將標籤中有 zindex 屬性的標籤存起來,
然後上邊也說了彈窗都有個共性就是其 zindex 值都很大,你忍一下。所以我們需要對數組根據 zindex 的值做個排序,如下:
然後我們就可以把值大的標籤的 style 屬性進行修改了,也就是這裏會有上邊提到的問題了,這個修改最大值最大值怎麼確定?
因爲這些值都是根據程序員個人喜好寫上去的,所以如果最大值判斷不當那可能整個頁面都沒了或者關不掉彈窗,經過一批網站的測試最後的判斷值如下:
最後,雖然這個方案不是最好的,但是也能解決大部分網站的彈窗問題,自己也不是寫前端的,歡迎大佬提供更好的代碼思路。
本人 github 上還有倆 selenium 和 playwright 的 demo,請參考 github 網址 [1]
參考文獻
[1]
github 網址: https://github.com/vvanglro/browser-popup
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Ulhkw9n1RIkqhjOutEMKfg