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

木偶人不能在page.evaluate或页面内断点。$$eval

问题: 木偶人不能在page.evaluate或页面内断点。$$eval是什么意思?它的作用是什么?有哪些使用场景?可以举例说明吗?

回答: $$eval是Puppeteer(一个Node.js库,用于控制Headless Chrome或Chromium浏览器)中的一个方法。它用于在页面上下文中执行DOM查询,并将结果返回给Node.js环境。

$$eval方法的作用是在页面内部执行指定的函数,该函数可以访问页面的DOM元素,并且可以返回计算结果。该方法接受两个参数:一个选择器,用于定位要操作的DOM元素,以及一个在页面上下文中执行的函数。

使用$$eval方法可以在页面上执行各种操作,例如获取特定元素的属性、修改元素的内容、触发事件等。它可以方便地获取和操作页面中的数据,而无需在Node.js环境中进行复杂的DOM操作。

$$eval方法的使用场景包括但不限于:

  1. 获取特定元素的属性值或文本内容:可以使用选择器定位元素,然后在执行的函数中获取所需的属性值或文本内容。
  2. 修改页面元素的属性或内容:可以使用选择器定位元素,然后在执行的函数中修改元素的属性或内容。
  3. 触发页面元素的事件:可以使用选择器定位元素,然后在执行的函数中触发元素的事件,模拟用户操作。
  4. 计算页面上的一些值或执行一些复杂的操作:可以在执行的函数中进行各种复杂的计算和操作,然后将结果返回给Node.js环境。

下面是一个使用$$eval方法的示例代码,通过该代码可以获取页面中所有链接的文本内容:

代码语言:txt
复制
const puppeteer = require('puppeteer');

async function getLinkTexts() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  
  const linkTexts = await page.$$eval('a', links => links.map(link => link.textContent));
  
  console.log(linkTexts);
  
  await browser.close();
}

getLinkTexts();

在上面的代码中,首先使用puppeteer库启动了一个浏览器实例,然后打开一个新的页面,并跳转到指定的URL。接着,使用$$eval方法选中页面中的所有链接元素,将其文本内容通过执行的函数进行提取并返回给Node.js环境。最后,将获取到的链接文本内容打印出来。最后,关闭浏览器实例。

腾讯云相关产品:无

参考链接:

  • Puppeteer官方文档:https://pptr.dev/#?product=Puppeteer&version=v12.1.0&show=api-pageevalselector-pagefunction-args
  • Puppeteer GitHub仓库:https://github.com/puppeteer/puppeteer
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Puppeteer 初探

    Puppeteer是一个Node库,它提供了一个高级API来通过DevTools协议控制无头 ChromeChromium ,它也可以配置为使用完整(非无头)ChromeChromium。...const dimensions = await page.evaluate(() => { return { width: document.documentElement.clientWidth...$eval() 相当于在 iframe 中运行 document.queryselector 获取指定元素,并将其作为第一个参数传递 iframe....$$eval 相当于在 iframe 中运行 document.querySelectorAll 获取指定元素数组,并将其作为第一个参数传递 还是看 这篇文章 吧,作者写了两个实例Demo,看一下代码就能懂上面的基础用法了...的事件,也可以通过evaluate来执行console page.on('console', msg => console.log('PAGE LOG:', msg.text())); await page.evaluate

    2.7K20

    【爬虫】爬取简书某ID所有文章并保存为pdf

    但过一段时间,当你想要重新查看这篇文章的时候,发现文章已经被移除莫名其妙地消失了。 如果当时能将这些文章以 pdf 格式保存到本地,待空闲的时候慢慢地看,就不用担心这个问题了。...本文的目标是利用 Google 推出的「puppeteer」,配合无头浏览器爬取某位大佬在简书上发布的所有文章,并对页元素进行优化样式后,以「pdf」格式保存下载到本地。...再设置好浏览器的大小,然后打开文章列表页面。...function autoScroll(page) { return page.evaluate(() => { return new Promise((resolve, reject...); } 等文章详情页面加载完全后,同样需要滑动页面到最底部,保证当前文章的文字信息、图片都加载完全。

    1.3K30

    腾讯云TCB云函数趣应用:巧用 puppeteer 五分钟实现一个云加社区个人成就爬虫

    个人成就数据也是同步更新,总是打开页面访问有点麻烦哇,用个爬虫来抓取不就方便多了嘛... # 技术选型 之前一直想用云函数来做爬虫,无奈小程序云开发的云函数还未完全支持 puppeteer ,调用会报错...value), 'float:none;width:100%;' ) } let clip = await page.evaluate...result.fileContent.toString('base64') } } } else { const staticInfo = await page.evaluate...img 参数传时返回 json 字符串数据 force 参数强制更新云存储中的成就图片 参数 说明 类型 可选值 默认值 uid 用户ID number -- 博主uid img 返回图片数据 number...函数配置->编辑基本信息->修改超时时间 云开发会校验网页应用请求的来源域名,您需要将来源域名加入到WEB安全域名列表中 安全配置->WEB安全域名->添加域名 云存储中有默认缓存时间,如果发现存储的图片更新

    2.2K10

    反-反爬虫:用几行代码写出和人类一样的动态爬虫

    支持JavaScript便可以动态加载资源,完成一些模拟人类的动作;支持DOM操作便可以结构化页面;CSS的支持便可以快捷方便的完成页面文档的渲染,供我们保存图片到处PDF;支持JSON、Canvas...和SVG更是对与数据多媒体页面处理的加分项;同时文件系统API的提供,也让我们很方便的将处理结果格式化存储起来。...脚本中可以使用Phantomjs提供的各类API(KM的markdown语法不支持页锚点,详见文章前部分的“Phantomjs提供的API汇总”); 打开页面 创建一个webpage的实例,然后使用open...如下,我们定义了一个简单的函数,来获取页面标题后返回。只需要简单的调用page.evaluate()来执行这段JavaScript代码即可。...javascript_code){ console.log(javascript_code[0]); eval

    3.6K20

    基于PhantomJS的动态爬虫引擎

    爬虫功能 爬虫主要需要具备基本功能: javascript动态解析能力 hook所有的网络请求 静态页面链接、表单自动分析能力 自动交互能力 1.1 静态页面链接和表单自动分析 phantomjs提供page.evaluate...分解下自动触发事件的三个步骤,逐步实现 1、获取事件 2、触发事件 3、获取事件触发结果 2.1 敛事件 获取敛事件:遍历节点,获取所有节点的onxx属性和javascript:属性值 触发敛事件...:调用eval执行所有的onxxxx属性和javascript:属性的值 2.2 绑定事件: 获取绑定事件:JavaScript中绑定事件,都会调用addEventListener函数,所以我们可以用hook...} console.error(msgStack.join('\n')); }; page.onCallback = function(){ var urls = page.evaluate...自动填写对应类型的表单数值 根据后缀禁止静态资源的加载,因为如果根据Content-Type判断将导致结果目录树不全 尽量获取所有标签中的链接,比如图片,视频等,因为可能存在SSRF、XSS、文件包含等漏洞 触发注销

    1.7K40

    利用web work实现多线程异步机制,打造页面单步调试IDE

    我们已经完成了整个编译器的开发,现在我们做一个能够单步调试的页面IDE,完成本章代码后,我们可以实现下面如图所示功能: ?...页面IDE可以显示每行代码所在的行,单击某一行,在改行前面会出现一个红点表示断点,点击Parsing按钮后,进入单步调试模式,然后每点一次step按钮,页面就会执行一条语句,被执行的语句会以黄色高亮,同时左边还有一个箭头表明当前编译器正在执行该语句...这里有个问题是,在reactjs 中SharedArrayMemory以及Atomics两个类智能在web worker中使用而不能在主线程也就是UI线程中使用。...页面IDE的实现框架如下: ? 接着我们看看代码实现,首先我们看看如何显示代码行数,红色断点,语句黄色高亮,以及显示代码执行时的指向箭头。...为何我们直接创建eval worker来和主线程配合,反而是多创建一个channel worker来做中介呢?

    1.7K30

    【dart-skeleton,逻辑篇】自动生成骨架屏项目

    我们先抽象一个生成骨架页面的类(GeneratePageStructure): 定义由构造函数传入options选项,且选项的类型使用Ts的interface进行定义。...value 复制代码 使用fs读取解析dom的js脚本; let scriptContent = await fs.readFileSync( path.resolve(__dirname, "eval-dom-scripts.js...await page.evaluate((res) => { // @ts-ignore return window.evalDOMScripts.apply(window, res); /...ts-ignore }, opts) 复制代码 我们还重点操作了一个pb类,这个类的主要功能是对puppeteer库的操作: 使用launch函数启动获得一个浏览器对象,启动时可以控制是否需要显示浏览器页面...); 复制代码 现在可以对浏览器的设备属性进行调整,如是否在是手机中PC电脑中,屏幕的尺寸信息等等; emulateOpts = puppeteer.devices["iPhone 6"]; await

    27650

    爬虫使用浏览器渲染的一些最佳实践

    下面的命令会直接启动 10 个浏览器,如果你指定 KEEP_ALIVE,那么在你断开链接(pp.disconnect)的时候也不会关闭浏览器,而只是把相关页面关闭掉。...不要忘记 page.waitForNavigation 如果点击了链接之后,需要使用 page.waitForNavigation 来等待页面加载。...Chrome 浏览器现在只能在启动的时候通过参数指定一个代理,如前文所述,每次都启动浏览器又很耗费资源,一种可能的方案是通过 chrome.proxy API 在每次请求的时候切换代理服务器。...我们知道 Chrome 浏览器包含了非常多的功能,而其中很大一部分的功能在核心渲染上是没有用的,可以参考一下移植 Chrome 到嵌入式平台的一些技巧,对 Chrome 浏览器本身做一些裁剪,将会大幅度降低渲染的资源消耗...一些网站,出于风控反爬原因,对于无头浏览模式是由限制的。这时候可以通过预先注入一些 JS 的方式来实现破解。 下篇文章将会探讨这些内容。

    2.2K10

    Python爬虫进阶必备 | XX同城加密分析

    推荐使用) 第二、参考开头的搜索关键字的方法,这里搜索的是encrypt,经常遇到加密的变量方法是encrypt(XX)这样的形式。...第三、试试从网页中找找答案,之前做过一些简单的例子是将 js 的代码直接写到页面中自执行或者采用隐藏域传递值的方式,比如:像PublicKey这类比较有特色的值,如果能找到对我们的帮助是很大的。...如果你很幸运先找到了eval加密的地方,但是不知道怎么解决,可以参考之前一篇关于js混淆的文章。...点我看文章 或者直接打开浏览器的开发者工具切换到console选项卡,把相关的eval代码粘贴进去,将代码开头的eval替换为console.log,就可以得到原来的代码了。...【图1-7】 这里的注意点是想要重新生成指纹,记得要刷新页面才可以。 尾 关于指纹的加密生成讲的比较简单,需要学习案例的朋友可以访问下面的网址。

    80420

    我写了一个自动化脚本涨粉,从0阅读到接近100粉丝

    Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium Chrome。...网页截图或者生成 PDF 爬取 SPA SSR 网站 UI 自动化测试,模拟表单提交,键盘输入,点击等行为 捕获网站的时间线,帮助诊断性能问题 ...... puppeteer 结构 Puppeteer...BrowserContext 实例定义了一个浏览会话并可拥有多个页面。 Page 至少有一个框架:主框架。 可能还有其他框架由 iframe 框架标签 创建。...// 获取左侧导航的所有链接地址及名字 let aTags = await page.evaluate(() => { let eleArr = [...document.querySelectorAll...console.log('page.url()',page.url()) // 获取当前页面的DOM内容 const bodyHTML = await page.evaluate(() => {

    50810

    Python爬虫神器pyppeteer,对 js 加密降维打击

    这篇文章我们来写一个简单的 demo,爬取拼多多搜索页面的数据,最终的效果如下: 我们把所有 api 请求的原始数据保存下来: ? 示例 json 文件如下: ?...注入 js 脚本 可以通过page.evaluate形式,例如: await page.evaluate(""" () =>{ Object.defineProperties(navigator...拼多多搜索爬虫 页面自动下拉 拼多多的搜索界面是一个无限下拉的页面,我们希望能够实现无限下拉页面,并且能够控制程序提前退出,不然一直下拉也不好,我们可能并不需要那么多数据。...maxScrollTimes : 最多下拉多少次(推荐使用,可以更好控制爬取多少数据) maxTries : 下拉不成功时最多重试几次,比如有时候会因为网络原因导致没能在 interval ms 成功下拉...page.setViewport({'width': 1080, 'height': 960}) await page.goto('http://yangkeduo.com') await page.evaluate

    3.1K20

    JS 逆向之 Hook,吃着火锅唱着歌,突然就被麻匪劫了!

    的概念在 Windows 桌面软件开发很常见,特别是各种事件触发的机制,在对特定的系统事件进行 Hook 后,一旦发生已 Hook 事件,对该事件进行 Hook 的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应...在程序中将其理解为“劫持”可能会更好理解,我们可以通过 Hook 技术来劫持某个对象,把某个对象的程序拉出来替换成我们自己改写的代码片段,修改参数替换返回值,从而控制它与其他对象的交互。...如果指定的话,油猴会默认添加几个最常用的 API @require 如果脚本依赖其他 JS 库的话,可以使用 require 指令导入,在运行脚本之前先加载其它库 @run-at 脚本注入时机...需要注意的是,火狐浏览器插件不一定能在其他浏览器上运行,而 Chrome 插件除了能运行在 Chrome 浏览器之外,还可以运行在所有 webkit 内核的国产浏览器,比如 360 极速浏览器、360...__cr_eval = window.eval; // 重写 eval var myeval = function(src) { console.log(src);

    1.6K10

    使用Puppeteer提升社交媒体数据分析的精度和效果

    Puppeteer是一个可以控制ChromeChromium浏览器的API,它可以实现以下功能:生成网页截图PDF文件模拟用户操作,如点击、输入、滚动等捕获网页上的元素,如文本、图片、链接等监听网页上的事件...我们可以使用npmyarn这样的包管理器来安装。...代理IP是指可以替代我们真实IP地址访问目标网站的其他IP地址,它可以帮助我们隐藏真实身份,避免被识别屏蔽。...page.evaluate()方法可以在页面上执行JavaScript代码例如,我们可以使用以下代码来登录Twitter账号:// 点击登录按钮await page.click('a[href="/login...Puppeteer可以让我们在页面上执行任意的JavaScript代码,所以我们可以使用JavaScript的内置第三方库来进行数据分析。

    32620

    网页调试之debugger原理与绕过

    同时也由于将字符串当作表达式来执行,那么里面常常伴随着代码混淆 函数执行debugger <!...便会跳过此断点 条件断点 ? ? 找到debugger前面的行号,鼠标右键点击该行号,点击 Add conditional breakpoint,直接写false。...小技巧:Deactivate breakpoints可以配合xhr、dom、Script等断点使用,便于调试 Hook绕过 function a() { eval("debugger"); }...,那么就无法使用此方法绕过 函数滞空法 当遇见断点时,回退一次堆栈。...此方法有局限性,若在此函数中还参杂了关键代码,将可能无法访问调试等 总结 Debugger绕过其实并不难,但在调试中仅仅是一道“开胃菜”,本节总结了debugger的实现方式,以及触发机制。

    8.1K70
    领券