首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Puppeteer:检测和访问循环中打开的弹出窗口的正确方法

Puppeteer是一个基于Node.js的开源工具,用于控制和自动化Chrome或Chromium浏览器。它提供了一组API,可以模拟用户在浏览器中的操作,例如点击、填写表单、截图等。对于检测和访问循环中打开的弹出窗口,可以使用以下方法:

  1. 使用page.on('popup', callback)方法来监听浏览器中打开的弹出窗口。当有新的弹出窗口打开时,回调函数将被触发,可以在回调函数中对新打开的窗口进行操作。

示例代码:

代码语言:txt
复制
page.on('popup', async (newPage) => {
  // 对新打开的弹出窗口进行操作
  await newPage.goto('https://example.com');
});
  1. 使用page.waitForTarget()方法来等待新的目标(包括弹出窗口)出现。可以设置targetType参数为'popup'来指定只等待弹出窗口的出现。

示例代码:

代码语言:txt
复制
const newTarget = await page.waitForTarget(target => target.type() === 'popup');
const newPage = await newTarget.page();
// 对新打开的弹出窗口进行操作
await newPage.goto('https://example.com');

这些方法可以帮助我们在循环中检测和访问打开的弹出窗口,从而实现对弹出窗口的正确操作。

关于Puppeteer的更多信息和使用方法,可以参考腾讯云的相关产品Puppeteer介绍页面:Puppeteer产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AAAI 2020 | DIoUCIoU:IoU在目标检测正确打开方式

论文提出了IoU-basedDIoU lossCIoU loss,以及建议使用DIoU-NMS替换经典NMS方法,充分地利用IoU特性进行优化。...并且方法能够简单地迁移到现有的算法中带来性能提升,实验在YOLOv3上提升了5.91mAP,值得学习 论文:Distance-IoU Loss: Faster and Better Learning...但一般对bbox精调都采用L2范数,而一些研究表明这不是最优化IoU方法,因此出现了IoU loss IoU loss [1240]   IoU loss顾名思义就是直接通过IoU计算梯度进行回归,...IoU loss实现形式有很多种,除公式2外,还有UnitBox交叉熵形式IoUNetSmooth-L1形式   这里论文主要讨论类似YOLO检测网络,按照GT是否在cell判断当前...注意到,CIoU在小物体上性能都有所下降,可能由于长宽比对小物体检测贡献不大,因为此时中心点比长宽比重要 [1240]   图7对GIoUCIoU结果进行了可视化,可以看到,在中大型物体检测上,

3.9K00

在 Linux 服务器中创建假桌面运行模拟浏览器有头模式

摄影:产品经理 寿喜锅一角 经常使用 Selenium 或者 Puppeteer 同学都知道,他们启动 Chrome 浏览器分为有头模式无头模式。...在自己电脑上操作时,如果是有头模式,会弹出一个 Chrome 浏览器窗口,然后你能看到这个浏览器里面在自动操作。而无头模式则不会弹出任何窗口,只有进程。 别去送死了。...下图为有头模式,不使用任何隐藏特征技术访问检测网站: 下图为无头模式,不使用任何隐藏特征技术访问检测网站: 万里河山一片红 所以,一般情况下,你应该多使用有头模式。...现在我们从服务器上把这个生成screenshot.png文件拉下来,打开以后可以看到内容如下: 可以看到,虽然窗口比较小,但确实是有头模式下面的检测结果。...然后修改 Selenium 代码,设置浏览器窗口大小: 运行效果如下图所示: 本文演示使用是 Python操作 Selenium,你也可以试一试使用 Puppeteer,只需要把启动命令改为xvfb-run

3.6K11

效率提高十倍,Puppeteer 如何启动交互模式?

现在,随便开一个 Chrome 窗口打开开发者工具,如下图所示: ? 大家注意,在开发者工具菜单栏左上角,图中箭头所指向位置,出现了 Node.js 绿色 Logo。我们点击一下它。...此时,会弹出一个单独开发者工具窗口,如下图所示: ? 这个窗口会自动关联上我们刚才启动 Node.js。 现在,我们试一试直接在这个开发者工具 Console标签页上面写一些代码: ?...可以看到,在Console标签页打印出来内容,也会在终端窗口出现。看起来,不过是从黑色窗口写代码变成了在白色窗口写代码,这有什么好炫耀?...我们尝试在这里打开博客: ? 可以看到,我在代码里面故意写错了一部分,应该用await browser.NewPage()但是我写是await browser.page,导致程序报错。...我下面重新改成正确就可以了。整个过程不需要重启浏览器。你运行一行代码,它执行一行代码,代码错了,只需要改这一行重新执行就可以了。这才叫做交互环境。

1.6K30

一日一技:爬虫模拟浏览器如何避免重复登录?

输入账号kingname密码genius以后,可以看到登录成功页面,如下图所示: 现在,你把浏览器关了再打开,然后再次访问这个网址,你会发现浏览器直接就能进入到登录成功页面,不会再出现登录页面。...这个过程一来拖慢了爬虫运行速度,二来容易让网站检测到你账号异常——难道自动登录功能失效了?为什么其他人都正常,他账号每小时都要重新登录一次?可能是爬虫,发个验证码过去探探虚实。...这个方法网上有很多例子,你可以通过关键词“selenium 获取cookies”“selenium设置cookies”搜索到,我就不再赘述了。 我们今天要讲的是第二个方法,也是最简单方法。...这个模式打开情况下,Puppeteer或者Selenium可以通过websocket连上去,进而控制它。 首先我们来启动Chrome远程调试端口。...大家可以试一试,现在在终端窗口里面按下Ctrl + C把当前爬虫代码强行关闭,然后再启动一次,你会发现依然是登录以后页面。

1.4K40

爬虫漫游指南:无头浏览器puppeteer检测攻防

最后,也是最重要,无头浏览器并不是无敌,反爬一方不会乖乖束手就擒,你有张良计,他自然就有过强梯,反爬一方会通过某些方法检测出无头浏览器,然后把这些请求全部处理掉,某些网站你使用无头浏览器甚至无法打开首页...上段说最后一点,也就是针对无头浏览器反爬攻防,就是本文所要讨论内容。PhantomJSSelenium已经日薄西山,本文只研究后来居上Puppeteer。 2....可以打开浏览器看一下,这个属性值是不是挺复杂。...Language 这一属性取自于navigator.language,在早期puppeteer版本中,无头模式下是没有这个属性,所以可以通过这种方法检测: function hasChrome()...Viewport 同样是早期版本中,puppeteer打开无头浏览器会有一个默认窗口大小,800600。

8.5K51

你以为万能爬虫方法,其实一行代码就能识别!

在以前公众号中,我提到Selenium/Puppeteer/Pyppeteer有很多特征可以被网站检测到。...于是,有些同学想到了另一个方法,就是自己写一个Chrome插件,在网站打开时候,注入到页面中,然后通过这个注入JavaScript代码来操作页面,获取数据。...这个方法理论上说是万能,因为注入JavaScript能够获取当前Dom树,任何接口签名都无法拦截到自己注入JavaScript代码,如下图所示: 而Chrome插件访问自己服务器后端是没有跨域问题...所以你只需要把网页打开,启动插件,然后他就能自动刷新,自动获取数据了。 这个方法看起来非常万能,而且无法被防御…… 事实真的是这样吗?我写了一个Demo来做测试。...Demo页面长下面这样: 当我手动点击点击我按钮时候,会弹出一个框: 现在,我使用JavaScript来选择这个按钮,然后点击它: 为什么网站知道我在用JavaScript点击了按钮呢?

1.5K30

负载均衡调度算法大全

负载主机可以提供很多种[负载均衡]方法,也就是我们常说调度方法或算法: 轮(Round Robin) 这种方法会将收到请求循环分配到服务器集群中每台机器,即有效服务器。...基于这个前提,轮调度是一个简单而有效分配请求方式。然而对于服务器不同情况,选择这种方式就意味着能力比较弱服务器也会在下一轮循环中接受轮,即使这个服务器已经不能再处理当前这个请求了。...对于非常强大“基于代理自适应负载均衡”方法来说,负载主机以这种方式来定时检测所有服务器负载情况:每台服务器都必须提供一个包含文件,这个文件包含一个0~99数字用来标明改服务器实际负载情况(0=空前...因此,如果一个服务器负载过大,权重会通过系统透明作重新调整。和加权轮调度方法一样,不正确分配可以被记录下来使得可以有效为不同服务器分配不同权重。...这种方式中每个真实服务器权重需要基于服务器优先级来配置。 加权响应(Weighted Response) 流量调度是通过加权轮方式。加权轮中所使用权重是根据服务器有效性检测响应时间来计算。

6.3K30

常见负载均衡策略「建议收藏」

负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效方法扩展服务器网络设备带宽、加强网络数据处理能力、增加吞吐量、提高网络可用性灵活性。...负载主机可以提供很多种负载均衡方法,也就是我们常说调度方法或算法。 轮 Round Robin: 这种方法会将收到请求循环分配到服务器集群中每台机器,即有效服务器。...基于这个前提,轮调度是一个简单而有效分配请求方式。然而对于服务器不同情况,选择这种方式就意味着能力比较弱服务器也会在下一轮循环中接受轮,即使这个服务器已经不能再处理当前这个请求了。...和加权轮调度方法一样,不正确分配可以被记录下来使得可以有效地为不同服务器分配不同权重。...加权轮中 所使用权重 是根据服务器有效性检测响应时间来计算。每个有效性检测都会被计时,用来标记它响应成功花了多长时间。

6.6K30

WSL运行Chrome Headless模式

前言 Google Chrome早就支持了headless模式,但一般都是在Linux上运行,而我则习惯于在WSL上开发,折腾了好久终于找到了可以在WSL上跑headless模式方法。...使用 官方文档方法打开Chrome: $ google-chrome --headless --disable-gpu --screenshot https://www.baidu.com/ 出现如下报错信息...看起来有两个问题: 中文没有正确显示 窗口大小偏小 中文显示问题可以通过以下命令解决: $ sudo apt install fonts-noto-cjk 修改窗口大小可以通过增加--window-size...使用puppeteer提供Chrome 无意中发现,puppeteer中提供Chrome竟然可以在WSL中开启调试端口并正常访问。...总结 安装依赖库,包括中文字体库 使用puppeteer提供Chrome版本 完整启动命令行:chrome --no-sandbox --headless --no-gpu --disable-setuid-sandbox

4.3K31

模拟浏览器如何正确隐藏特征

Selenium 与 Puppeteer 能被网站探测几十个特征》中,我们提到目前网上检测方法几乎都是掩耳盗铃,因为模拟浏览器有几十个特征可以被检测,仅仅隐藏 webdriver 这一个值是没有任何意义...具体做法原理,大家可以参考我这两篇文章: (最新版)如何正确移除Selenium中 window.navigator.webdriver (最新版)如何正确移除 Pyppeteer 中window.navigator.webdriver...如果你使用是 Pyppeteer,那么可以根据我上面文章中给出方法,试着加载一下这个 js 文件,看看是不是也能成功隐藏特征。 那么,这个stealth.min.js文件是怎么来呢?...此时,你需要把它package.jsonindex.js两个文件保存到本地。...然后打开package.json文件,修改其中dependencies这一项,把里面的puppeteer改成puppeteer-core,如下图所示: 然后修改index.js,给.launch()函数增加一个参数

6.7K21

写个爬虫,爬取 Boss 直聘全部前端岗位

首先,进入搜索页面,选择全国范围,搜索前端: 然后职位列表每个点进去查看描述,把这个岗位信息描述抓取下来: 创建 test.js import puppeteer from 'puppeteer'.../test.js 它会自动打开一个浏览器窗口: 然后执行自动化脚本: 这样,下面的列表数据就是可以抓取了。...不过这里其实没必要这么麻烦,因为只要你 url 里带了 city query 参数,会自动设置为搜索参数: 所以直接打开这个 url 就可以: import puppeteer from 'puppeteer...就是在 url 后再带一个 page 参数: 然后,我们遍历访问每页数据,拿到每个职位信息: import puppeteer from 'puppeteer'; const browser =...浏览器访问下: 爬虫跑没啥问题。 不过这个过程中 boss 可能会检测到你访问频率过高,会让你做下是不是真人验证: 这个就是验证码点点就好了。

24520

在Pyppeteer中正确隐藏window.navigator.webdriver

但是如果你使用了本文方法,用Pyppeteer抓取淘宝,你就会发现另外一个广阔天地。...今天,我们来讲讲如何在Pyppeteer中隐藏 window.navigator.webdriver 首先,我们使用下面的代码,通过Pyppeteer打开浏览器窗口: import asyncio from...await browser.close() asyncio.get_event_loop().run_until_complete(main()) 代码运行以后,会打开Chrome浏览器,并访问 http...那么正确办法是什么呢? 我写这篇文章时候(2019-08-15),Pyppeteer最新版本为0.0.25,如下图所示: ?...题外话:官方文档源代码是你好朋友,如果官方文档找不到你想要功能,源代码又看不懂,那么就阅读我写爬虫书吧——学爬虫不走野路子。

3.7K20

自动化 Web 性能分析之 Puppeteer 爬虫实践

正如其翻译为“操纵木偶的人”一样, 你可以通过 Puppeteer 提供 API 直接控制 Chrome,模拟大部分用户操作来进行 UI 测试或者作为爬虫访问页面来收集数据。...Puppeteer 用途 生成页面的屏幕截图 PDF。 爬取 SPA 应用,并生成预渲染内容(即 SSR 服务端渲染)。 自动执行表单提交、UI测试、键盘输入等。...初探 Puppeteer:从页面截图开始 实现页面截图,首先我们需要创建一个浏览器实例,然后打开一个页面,加载指定 URL,在打开页面上触发截图操作,最后再将浏览器关闭。...双探 Puppeteer:爬取苏宁易购商品信息 打开电商首页,输入想要商品名称,点击搜索按钮,跳转至相应商品列表页,然后一页页浏览,从而找到心仪商品,这大概就是我们平时网购样子。...结语 当然, Puppeteer 强大不止于此,我们可以通过 Puppeteer 实现更多有意思功能,比如使用 Puppeteer检测页面图片是否使用懒加载,后续我们会对其功能实现进行分享,

3.4K40

一周一技 | 不注入JS怎么防止Pyppeteer被反爬?

由于Selenium启动Chrome中,有几十个特征可以被识别,所以在爬虫界已经没有以前那么受欢迎了。模拟浏览器新秀Puppeteer异军突起,逐渐受到了爬虫界关注。...但是如果你使用了本文方法,用Pyppeteer抓取淘宝,你就会发现另外一个广阔天地。...今天,我们来讲讲如何在Pyppeteer中隐藏 window.navigator.webdriver 首先,我们使用下面的代码,通过Pyppeteer打开浏览器窗口: import asyncio from...await browser.close() asyncio.get_event_loop().run_until_complete(main()) 代码运行以后,会打开Chrome浏览器,并访问 http...那么正确办法是什么呢? 我写这篇文章时候(2019-08-15),Pyppeteer最新版本为0.0.25,如下图所示: ?

5.8K31

Headless Testing入坑指南

界面,所以你可以绕过真正浏览加载CSS、JavaScript打开、绘制HTML所有环节。...因为你可以利用无头测试工具提供命令行+api来自动化地替代大量简单重复操作,如输入页面地址、刷新页面、表单提交、确认显示数据是否正确等等。...他可以辅助Nightmare更好完成自动化测试。 将NightmareMocha安装成开发依赖方法: 下面是一个基于NightmareMocha例子: 这里我还使用到了断言库——chai。...Headless Chrome带来了由ChromiumBlink渲染引擎提供所有现代web平台功能。这是一种不需要在屏幕上打开窗口全新页面交互方式。...安装Puppeteer方法 下面的例子中,使用Puppeteer来对页面进行截屏。 下面的例子中,使用Puppeteer来对页面数据进行抓取。

1.7K50

基于puppeteer模拟登录抓取页面

,因为并不是所有的需要检测分析网站用户都可以管理网站。...两种方式都存在https http资源由于同源策略引起另一个问题,https站无法加载http资源,所以如果为了最好兼容性,热图分析工具需要被应用http协议,当然具体可以根据访问客户网站而具体分站优化...针对这种情况,如果基于puppeteer来做,流程就变成了 puppeteer启动浏览器打开用户网站-->页面渲染-->返回渲染后结果,简单用伪代码实现如下: const puppeteer = require...,所谓模拟登录就是让浏览器去登录,这里需要用户提供对应网站用户名密码,然后我们走如下流程: 访问用户网站-->用户网站检测到未登录跳转到login-->puppeteer控制浏览器自动登录后跳转到真正需要抓取页面...: 通过puppeteer启动浏览器打开请求页面-->点击登录按钮-->输入用户名密码登录 -->重新加载页面 基本代码如下图: const puppeteer = require("puppeteer

6.1K100

Android 开发艺术探索笔记二

,完成窗口添加到系统前准备工作 Window删除过程 检查删除线程正确性,不正确抛异常 从ViewRootImpl列表,布局参数列表与View列表删除与Window对应原色 判断是否可以直接执行删除操作...applicationcontext会报错.是由于没有应用token导致,而token只有activity有,可以指定为系统类型window就可以正常弹出。...Looper用来处理消息,以无限方法是查看是否有新消息,有的话就进行处理,否则一直处于等待。还有一个特殊概念ThreadLocal,作用可以在每个线程中存储数据。...loop方法是一个死循环,只有MessageQueuenext方法返回为空时,才会跳出坏,所以不使用时必须通过quit或者quitSafely退出循环,否则会造成内存泄漏等其他问题 Handler工作原理...; 按照先进先出原则对元素排列,默认情况下不保证公平访问队列,公平访问队列指的是:阻塞所有的生产者与消费者,当队列可用时,按照阻塞先后顺序进行访问,先阻塞生产者,往里面插入元素;阻塞消费者,从队列里面获取元素

1.8K10
领券