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

木偶人无法使用evaluate获取页面的innerHTML

问题:木偶人无法使用evaluate获取页面的innerHTML。

答案:木偶人是一个无头浏览器,它无法直接获取页面的innerHTML。无头浏览器是一种没有可视化界面的浏览器,通常用于自动化测试和爬虫等场景。它可以模拟用户行为,执行JavaScript代码,但无法像常规浏览器那样直接获取页面的渲染结果。

要解决这个问题,可以通过以下步骤来获取页面的innerHTML:

  1. 使用木偶人打开目标网页,并等待页面加载完成。
  2. 执行JavaScript代码,通过evaluate函数获取目标元素的outerHTML属性。
  3. 将获取到的outerHTML属性值作为结果返回。

示例代码(使用Puppeteer库):

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

async function getInnerHTML(url, selector) {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url);
  await page.waitForSelector(selector);
  const innerHTML = await page.evaluate((sel) => {
    const element = document.querySelector(sel);
    return element ? element.innerHTML : null;
  }, selector);
  await browser.close();
  return innerHTML;
}

const url = 'https://example.com';
const selector = '#target-element';
getInnerHTML(url, selector)
  .then((innerHTML) => {
    console.log(innerHTML);
  })
  .catch((error) => {
    console.error(error);
  });

在上述示例中,我们使用了Puppeteer库来控制木偶人浏览器。通过指定目标网页的URL和目标元素的选择器,我们可以获取到该元素的innerHTML。

腾讯云相关产品推荐:腾讯云函数(云函数是一种无服务器计算服务,可让您无需管理服务器即可运行代码),产品介绍链接地址:https://cloud.tencent.com/product/scf

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

相关·内容

PhantomJS基础

() 在打开一个网页后,我们往往有对其进行操作的需求,例如模拟点击登陆按钮、获取某个DOM元素等等,也就是需要在页面中执行javascript代码,这时候我们就需要使用evaluate()方法。...); phantom.exit(); }); 由于因为evaluate()方法相当于一个沙盒,在其中是无法访问evaluate()之外的变量的。...那如何将我想要获取的dom元素的id传进evaluate呢?...比如我想从淘宝教育的课程详情跳转到购买(在淘宝网中),可以从淘宝同学请求的资源url中筛选出带淘宝网商品详情的商品id,然后用这个淘宝网商品id拼接成一个淘宝网的商品详情url,再次使用open...如果使用Page模块的onResourceReceived()方法监听页面收到的请求资源,是无法得到该资源的response.body的,这也是目前PhantomJS最受开发者吐槽的点之一。

1K20

PhantomJS 基础及示例

()在打开一个网页后,我们往往有对其进行操作的需求,例如模拟点击登陆按钮、获取某个DOM元素等等,也就是需要在页面中执行javascript代码,这时候我们就需要使用evaluate()方法。...); phantom.exit(); });由于因为evaluate()方法相当于一个沙盒,在其中是无法访问evaluate()之外的变量的。...那如何将我想要获取的dom元素的id传进evaluate呢?...比如我想从淘宝教育的课程详情跳转到购买(在淘宝网中),可以从淘宝同学请求的资源url中筛选出带淘宝网商品详情的商品id,然后用这个淘宝网商品id拼接成一个淘宝网的商品详情url,再次使用open...如果使用Page模块的onResourceReceived()方法监听页面收到的请求资源,是无法得到该资源的response.body的,这也是目前PhantomJS最受开发者吐槽的点之一。

6.8K00
  • Puppeteer:从零出发,全面掌握浏览器自动化神器

    方法到目标页面的上下文获取第一条描述内容 const textContent = await page.evaluate(() => { const element = document.querySelector...page.on('response', response => { console.log('response : ', response.url()) }) })() 页面交互: 前面的示例中或多或少都使用到了...但是如果定位器 API 无法满足时仍可以使用低级别的 API,如:page.waitForSelector() 或 ElementHandle。...获取元素值或 ElementHandle : // 使用 map 函数将元素映射为 JavaScript 值,调用 wait() 将返回序列化的 JavaScript 值 const enabled =...}) 添加 debugger; 关键字中断代码: // 注意启用 devtools 选项 await page.evaluate(() => { // 模拟客户端代码中使用 debugger; 关键字中断代码执行

    70911

    基于 Electron 的爬虫框架 Nightmare

    ,所以无论是手动触发脚本还是行为触发脚本都是轻而易举的(这边注意,如果事件具备 isTrusted 的检查的话,就无法触发了)。...使用 Nightmare 为了更快速使用 NPM 下载,可以使用淘宝的镜像地址。直接 NPM 安装Nightmare 就完成安装了(二进制的 Electron 依赖有点大,安装时间可能比较长)。...第一步获取需要抓取的话题深度,默认的根是现在知乎的根话题; /** * 抓取对应的话题页面的url和对应的深度保存到指定的文件名中 * @param {string} rootUrl - 顶层的url...(function () { // 获取这块数据 return document.querySelector('.zu-main-sidebar').innerHTML }) //...(function () { return document.querySelector('.zh-profile-card').innerHTML }) .then(val =>

    3.1K60

    最新puppeteer爬虫boss直聘招聘公司及职位信息

    image ****一、试错阶段**** 尝试使用了requests,selenium,pyppeteer,发现都不能正常访问boss直聘,厉害了我的老板!...于是只能采用puppeteer,因第一次使用puppeteer,也是第一次使用nodejs,代码规范和操作可能多有不妥之处,请您见谅。...2、页面跳转问题 意图通过对页面的点击操作,进行一步步获取信息,但是在实践过程中发现,跳转后页面会一直处于加载的卡死状态。 最后选择了通过一步步获取url,单纯加载url的形式进行获取信息。...let title = element.querySelector('div > div.info-primary > div.info-company > div > h3 > a').innerHTML...image 最后发现并不能获取所有相应信息,因为职位搜索只显示前10,公司招聘职位只显示前30。如有童鞋有解决办法,望留言讨论 上面是获取公司信息和职位信息,但公司信息简单,关键信息没有。

    1.2K33

    PhantomJS基础及示例

    () 在打开一个网页后,我们往往有对其进行操作的需求,例如模拟点击登陆按钮、获取某个DOM元素等等,也就是需要在页面中执行javascript代码,这时候我们就需要使用evaluate()方法。...); phantom.exit(); }); 由于因为evaluate()方法相当于一个沙盒,在其中是无法访问evaluate()之外的变量的。...那如何将我想要获取的dom元素的id传进evaluate呢?...比如我想从淘宝教育的课程详情跳转到购买(在淘宝网中),可以从淘宝同学请求的资源url中筛选出带淘宝网商品详情的商品id,然后用这个淘宝网商品id拼接成一个淘宝网的商品详情url,再次使用open...如果使用Page模块的onResourceReceived()方法监听页面收到的请求资源,是无法得到该资源的response.body的,这也是目前PhantomJS最受开发者吐槽的点之一。

    1.1K80

    PhantomJS基础及示例

    () 在打开一个网页后,我们往往有对其进行操作的需求,例如模拟点击登陆按钮、获取某个DOM元素等等,也就是需要在页面中执行javascript代码,这时候我们就需要使用evaluate()方法。...); phantom.exit(); }); 由于因为evaluate()方法相当于一个沙盒,在其中是无法访问evaluate()之外的变量的。...那如何将我想要获取的dom元素的id传进evaluate呢?...比如我想从淘宝教育的课程详情跳转到购买(在淘宝网中),可以从淘宝同学请求的资源url中筛选出带淘宝网商品详情的商品id,然后用这个淘宝网商品id拼接成一个淘宝网的商品详情url,再次使用open...如果使用Page模块的onResourceReceived()方法监听页面收到的请求资源,是无法得到该资源的response.body的,这也是目前PhantomJS最受开发者吐槽的点之一。

    89220

    deno牌puppeteer,真香!

    puppeteer常常被用来生成页面的屏幕截图和PDF、实现SSR、自动化测试等等,在业界也有不少企业级的运用,比如有赞商城前端团队使用puppeteer搭建统一海报渲染服务,TCB 的云函数也支持 puppeteer...于是也有开发者想在 deno 中使用puppeteer,就有了上图中的issue 。 deno-x-ranking puppetter 尽管有人排斥造轮子,但应该没人反对为了方便而使用轮子。...,在当前目录生成juejin.png和juejin.pdf: puppetter_deno 获取掘金酱的个人成就 原本想从掘金的搜索入口入手,先从关键字搜索到用户列表,再从列表中的用户链接跳转到个人...staticInfo = await page.evaluate(() => { const element:any = document.querySelector('.minor-area')...obj[i] = element.getElementsByClassName('stat-item').item(i).querySelector('.content') .innerHTML.replace

    1.1K30

    【python自动化】playwright长截图&切换标签&JS注入实战

    每个页面都有唯一的句柄,最新的页面可通过下标[-1]获取。...JS注入 在一些特殊的情况下,我们需要执行原生js,从而达到我们一些框架无法完成的操作。...js注入 官方文档:https://playwright.dev/python/docs/api/class-page#page-evaluate 使用evaluate方法或evaluate_handle...图片拼接技术参考之前文章:web自动化之selenium的特殊用法汇总篇 , 这篇文章的特殊网页无法长截图,使用多图拼接技术章节。...playwright连接本地浏览器(含用户数据,免登陆,懒加载) 2、使用js在新标签打开相关网址 3、切换至指定标签 4、定位右侧栏,结合js滚动进行多图截取 5、使用PIL库进行多图拼接 注:本教程为示列代码

    2.4K20

    node爬取新型冠状病毒的疫情实时动态

    iframe,然后根据 iframe 的名字精确获取某个想要的 iframe const frame = await page.mainFrame(); const bodyHandle =...$('html'); //获取所有的html //frame.evaluate()在浏览器中执行函数,相当于在控制台中执行函数,返回一个Promise const html = await...frame.evaluate(body=>body.innerHTML,bodyHandle); await bodyHandle.dispose(); browser.close(); console.log...(html); })(); 用cheerio解析html: // 使用cheerio模块装载我们得到的页面源代码,返回的是一个类似于jquery中的$对象 // 使用这个$对象就像操作jquery对象一般去操作我们获取得到的页面的源代码...$('html'); const html = await frame.evaluate(body=>body.innerHTML,bodyHandle); await bodyHandle.dispose

    1.2K20

    基于Chrome扩展的浏览器可信事件与网页离线PDF导出

    那么我们可以继续沿着提取HTML内容的思路处理数据,首先我们需要考虑如何获取这个HTML内容,最简单的方案就是我们通过读取Node.innerHTML属性来获取DOM结构,那么问题来了,在语雀当中有大量的...Chrome.debugger API可以作为Chrome的远程调试协议的另一种传输方式,使用chrome.debugger可以连接到一个或多个标签来监控网络交互、调试JavaScript、修改DOM...,这也印证了之前我们说的在Inject Script下执行paste命令是无法正常触发的,进而我们可以明确clipboardRead权限是需要我们在Content Script中使用的。...的,因此我们就需要将页面的高度和宽度取得,此时我们可以通过Page.getLayoutMetrics方法来获取面的布局信息,这个方法会返回一个LayoutMetrics对象,其中包含了页面的宽度、高度...然而当然我们也可以通过通信的方式将消息传递到Content Script中得到页面的宽高信息,在这里我们采用更加简单的方式,通过执行Runtime.evaluate的方式,获取得到的返回值,这样我们可以灵活地取得更多的数据

    11010

    web页面的打印以及批量打印实现方法

    打印事件:window.print() 1.单打印(布局打印): function printCnt(){ //1.获取当前的html代码 var body = window.document.body.innerHTML...; //2.要打印的部分(#print里面的内容就是要打印的内容) window.document.body.innerHTML =document.getElementById(..."print").innerHTML; window.print(); window.document.body.innerHTML = body; //重新载入当前文档...JS window.print()第二次点击事件失效问题 2.批量打印 注意点: (1).控制网页的分页:page-break-after:always 注意:避免在表格、浮动元素、带有边框的块元素中使用分页属性...window.open(“showPrint.html”,”print”); 打印预览页面的话 //如果是本地测试,需要先新建Print.html,如果是在域中使用,则不需要 // res 是后端返回的需要打印的

    4.8K00
    领券