前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【实测】selenium脚本解决随机弹窗广告问题

【实测】selenium脚本解决随机弹窗广告问题

作者头像
我去热饭
发布2023-02-23 14:32:35
1.4K0
发布2023-02-23 14:32:35
举报
文章被收录于专栏:测试开发干货

欢迎阅读测试开发干货文章:

开始正文:---------

selenium是通过webdriver操作目标来实现ui自动化脚本。

但一直有个问题很让人头疼,那就是各种随机不可预测的弹窗广告的出现,这种广告出现后需要点击一下x 或按钮等才能关掉,如果不关掉,则后续脚本无法正常运行,直接导致所有用例失败。今天就来分享几个解决方案

1. 有不少同学可能会在广告经常出现的页面脚本代码中,设置一个try,当该页面脚本突然无法运行下去的时候,就会认为是弹窗出现,然后在except中直接放上关闭弹窗的代码,然后关闭之后重跑该用例。其实这样做也是确实可以解决一下问题,如果毕竟有堵的成分且不够优雅,或者不是特别的靠谱。但不可否认这是最容易实现和想到的方案。

2. 设置子线程进行巡逻,主线程该跑脚本跑脚本。子线程负责进行环境维护,出现弹窗就关掉仅此而已。当然子线程可以继续扩展,比如发现弹窗后截图,简单判断一下记录一下再关掉。除此之外,子线程还可以帮主线程的脚本运行提供其他各种辅助作用,相当于你的游戏角色大c下副本,带了一个奶妈,肯定是事半功倍。

那么子线程进行巡逻,自然不能跟主线程共用一个driver对象,否则这个driver就变成了既要同时执行用例脚本,又要无时无刻的去盯着随机弹窗广告,那会极大拖慢执行速度。所以子线程就可以选择再启动一个driver对象的方式。那此刻问题又来了:新的driver能控制主线程driver的浏览器么?正常情况下是不能控制的。除非按照下面思路进行设置:

1. 用命令启动浏览器,启动的时候要带上端口,只有命令启动,才可以添加端口参数。

2. 脚本开头创建启动项options,然后添加debugaddress,并设置为127.0.0.1:之前的端口,这样会让driver不新建浏览器,而是直接接着你命令启动的浏览器进行操作。

3. 用thread库创建一个线程,内容就是新建一个driver实例作为子线程,用来辅助,也就是里面用一个when True来在整脚本生命周期内 无时无刻的去检查弹窗广告,一旦检查到,才去瞬间关闭,亲测好用。

4. 你的主线该怎么运行就怎么运行,完全不用担心弹窗的事了,当然双线程,并且有个辅助线程一直在不断的监控,这样确实会更耗费系统资源。所以建议封装成对应的类,并且增加可控的创建和结束功能,在适当的情况下比如广告容易出现的用例执行时开启即可。结束的条件也可以多样化,比如点击几次广告后,该辅助线程就自动关闭。

最后奉上子线程控制同浏览器demo代码:

代码语言:javascript
复制
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:6789")  #手动命令启动浏览器需要设置端口未6789 :  --remote-debugging-port=6789
import threading

def a():
    driver = webdriver.Chrome(options=options)
    while True:
        try:
            driver.find_element(By.ID,'弹窗关闭的id').click()
            driver.switch_to.alert.accept()
        except:
            pass
        time.sleep(1) # 扫描监控时间
        # 退出驱动条件自行设计
        driver.quit()

t1 = threading.Thread(target=a)
t1.setDaemon(True) #守护线程,这样主脚本结束后 该线程也会结束。
t1.start()

 # 此处你可以正常写你的主线程的 脚本了
driver = webdriver.Chrome(options=options)
driver.get('')
...
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发干货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档