pyppeteer dialog点击弹窗

import asyncio
import time
import random
from pyppeteer import launch   # 控制模拟浏览器用
from pyppeteer.dialog import Dialog
from retrying import retry      # 设置重试次数用的
js1 = '''() =>{Object.defineProperties(navigator,{webdriver:{get: () => undefined} })}'''
js2 = '''() => {alert ( window.navigator.webdriver )}'''

async def close_dialog(page):
    # 点击弹窗
    # class*= 模糊匹配
    try:
        await page.evaluate(
            '''var temp=document.querySelector('button[class*="infotip__close"]');if(temp){temp.click()}''')
        await page.evaluate(
            '''var temp=document.querySelector('span[class="step-close"]');if(temp){temp.click()}''')
        await page.evaluate(
            '''var temp=document.querySelector("a[class*='dialog-close']");if(temp){temp.click()}''')
        await page.evaluate('''document.querySelector("div[role='dialog']").remove()''')
        await page.evaluate('''var temp=document.querySelector('button[class*="close"]');if(temp){rs.click()}''')
        await page.evaluate('''var rs=document.querySelector('a[title="Close"]');if(rs){rs.click()}''')
        await page.evaluate(
            '''var heddens=document.querySelector("div[style*='overflow:hidden']");if(heddens){heddens.remove()}''')
        a_tags = await page.xpath('//button[contains(@class,"close") or contains(@id,"close") or contains(@aria-label,"close")]')
        a_tags1 = await page.xpath('//a[contains(@class,"close") or contains(@id,"close") or contains(@aria-label,"close") or contains(@title,"Close")]')
        for a in a_tags + a_tags1:
            a.click()
    except:
        pass

async def main(url): # 定义main协程函数,
    #插件路径
    chrome_extension = r'C:\Users\Administrator.USER-20190313RI\AppData\Local\Chromium\User Data\Default\Extensions\dbclpoekepcmadpkeaelmhiheolhjflj\0.2.7_0'
    args = ['--no-sandbox',
        '--disable-gpu',
        '--log-level=3', #日志等级
        '--disable-infobars',  # 关闭提示
        '--window-size={},{}'.format(1080,950),
        # "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36",
        '--load-extension={}'.format(chrome_extension), #加载扩展插件
        '--disable-extensions-except={}'.format(chrome_extension),
        ]
    if proxy:
        ip=re.findall('(\d+\.\d+\.\d+\.\d+:\d+)',proxy)
        if len(ip)>0:
            args.append("--proxy-server=http://{}".format(proxy))

    exepath = r'D:\Program_Files\chrome-win32\chrome.exe'  #chromium浏览器路径
    # dumpio:True 浏览器就不会卡住了
    #浏览器启动参数
    params={'executablePath': exepath,
             "userDataDir": r"F:\temporary",
                'headless': False,
               'args':args,
             'dumpio':True}
    browser = await launch(params)     # 启动pyppeteer 属于内存中实现交互的模拟器
    page = await browser.newPage()   # 启动个新的浏览器页面
    await page.setUserAgent(
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36')

    #设置页面超时
    page.setDefaultNavigationTimeout(1000*60) #60s
    #启用js
    await page.setJavaScriptEnabled(True)
    # 启用拦截器
    # await page.setRequestInterception(True)
    await page.evaluate(js1)
    await page.evaluate(js2)
    await page.setViewport({'width':1300,'height':868}) #设置界面
    page.on('dialog', lambda dialog: asyncio.ensure_future(handle_dialog(page,dialog)))
    await page.goto(url)    # 访问登录页面
    await asyncio.sleep(5)
    # 关闭弹窗
    await close_dialog(page)
    await browser.close()

async def handle_dialog(page,dialog: Dialog):
    print(dialog.message)#打印出弹框的信息
    print(dialog.type)#打印出弹框的类型,是alert、confirm、prompt哪种
    # print(dialog.defaultValue())#打印出默认的值只有prompt弹框才有
    await page.waitFor(2000)#特意加两秒等可以看到弹框出现后取消
    await dialog.dismiss()
   # await dialog.accept(‘000’) #可以给弹窗设置默认值



   
if __name__ == '__main__':
    url = 'https://www.baidu.com'
    loop = asyncio.get_event_loop()
    m = main(url)
    loop.run_until_complete(m) 

el-dialog是一个基于Element UI的对话框组件,可以用于实现侧边弹窗。以下是一个简单的el-dialog侧边弹窗的实现方法: ```html <template> <div> <el-button @click="dialogVisible = true">打开侧边弹窗</el-button> <el-dialog :visible.sync="dialogVisible" width="30%" :close-on-click-modal="false" :close-on-press-escape="false" :modal-append-to-body="false" :append-to-body="true" :before-close="handleClose" custom-class="dialog-custom-class" > <div slot="title" class="dialog-title"> <span>侧边弹窗</span> <el-button class="dialog-close-btn" type="text" @click="dialogVisible = false"> <i class="el-icon-close"></i> </el-button> </div> <div class="dialog-content"> <p>这是一个el-dialog侧边弹窗的示例。</p> </div> </el-dialog> </div> </template> <script> export default { data() { return { dialogVisible: false, }; }, methods: { handleClose(done) { this.$confirm("确认关闭?") .then(() => { done(); }) .catch(() => {}); }, }, }; </script> <style scoped> .dialog-custom-class { position: fixed; top: 0; right: 0; height: 100%; margin: 0; padding: 0; border: none; box-shadow: none; background-color: transparent; z-index: 9999; } .dialog-title { background-color: #f5f7fa; border-bottom: 1px solid #ebeef5; padding: 10px 20px; font-size: 16px; font-weight: 500; color: #303133; } .dialog-close-btn { position: absolute; top: 10px; right: 20px; font-size: 20px; color: #909399; } .dialog-content { padding: 20px; } </style> ``` 在上述代码中,el-dialog组件的visible属性绑定到了dialogVisible变量,通过控制dialogVisible变量的值来控制侧边弹窗的显示和隐藏。同时,为了实现侧边弹窗的效果,我们需要给el-dialog组件添加一些样式,例如将其定位到页面的右侧,并设置其宽度为30%等。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值