Articles of 无头浏览器

使用无头铬来拦截图像请求数据

我有一个用例,需要使用无头Chrome浏览器( https://chromedevtools.github.io/devtools-protocol/tot/Network/ )截取所有的图片请求,并find图片的大小,然后保存它(基本上丢弃小图像,如图标)。 但是,我无法find一种方法来加载内存中的图像数据保存之前。 我需要加载它的Img对象来获得width和height 。 Network.getResponseBody采取requestId,我没有在Network.requestIntercepted访问。 另外Network.loadingFinished在encodedDataLengthvariables中总是给我“0”。 我不知道为什么。 所以我的问题是: 如何拦截来自jpg / png请求的所有响应并获取图像数据? 不通过URLstring将文件保存到磁盘并加载回来。 BEST:如何从标题响应获取图像维度? 然后,我不必将数据读入内存。 我的代码如下: const chromeLauncher = require('chrome-launcher'); const CDP = require('chrome-remote-interface'); const file = require('fs'); (async function() { async function launchChrome() { return await chromeLauncher.launch({ chromeFlags: [ '–disable-gpu', '–headless' ] }); } const chrome = await launchChrome(); const protocol = await […]

puppeteer api:只能得到域名redirect

我试图使用Puppeteer api获取所有的域名redirect,在截取最终的URL之前保存到一个数组中,但是到目前为止,我的代码也获得了其他redirect。 例如,如果我goto youtube.com那么我的代码将正确获取redirect'https://youtube.com/', 'https://www.youtube.com/', ,但它也会得到其他redirect,如doubleclick.net。 我只想得到在URL栏中发生的redirect。 我已经设法缩小与request.resourceType === 'document' 。 我怎样才能进一步缩小呢? 代码如下: // node chrome.js http://youtube.com const puppeteer = require('puppeteer'); var url = process.argv[2]; (async () => { const browser = await puppeteer.launch({headless: true, timeout: 30000, ignoreHTTPSErrors: true}); const page = await browser.newPage(); // await page.setRequestInterception(true); // hangs with resourcetype const urls = []; […]

nodejs和phantomjs或任何其他无头浏览器之间的实时通信

我正在开发一个nodejs中的应用程序,它将多个Intranet站点合并为一个。到目前为止,我使用requestjs来请求获取我需要的东西。 我有点卡在如何做nodejs(与快递)和具有validation码login的特定网站之间的实时通信。 我正在考虑将validation码转发给我的用户界面的无头浏览器,但是我不知道如何开始。 有没有好的和最新的教程?

无法让page.injectJs()在PhantomJS中工作

我在我的代码中有以下内容: phantom.createPage(function(page){ page.onCallback = function(data) { console.log("ph callback: ", data); }; page.open(req.query.testUrl, function(status){ if(status !== 'success'){ page.close(); res.status(500) .send('Page "' + testUrl + '" could not be loaded.') .end(); return; } var result = page.injectJs('lib/my-test-script.js'); console.log('injectJS: ', result); page.evaluate(function(){ window.callPhantom(window.mocha.constructor.name); }, function(){ console.log('finished'); page.close(); res.json({status: status}); res.end(); }); }); }); 和console.log('injectJS: ', result); 正在输出“injectJS:undefined”,而不是显式false因为文档在这里说: http://phantomjs.org/api/webpage/method/inject-js.html […]

我将如何去build立窗口的节点嵌合体?

我有Windows 7,并有兴趣使用节点 – 嵌合体。 https://github.com/deanmao/node-chimera 他们没有windows的二进制文件,我怎么能自己build立这个并将其安装到NPM中 ? 我有Visual Studio 2012 (我标记的C + +,因为我认为嵌合是build立在C + +,但我从来没有编译过C + +应用程序)

如何将javascript应用于模拟浏览器的html

我已经在互联网上search了如何“创build”一个简单的无头浏览器,因为我有兴趣知道浏览器如何在内部工作。 我想实现一个简单的无头浏览器。 我的意思是:假设你有一个htmlstring和一个javascriptstring,都是作为HttpRequest到服务器的结果; 我怎么能应用JavaScript的HTMLstring? 例如:我向一个X服务器请求了html源文件,并在响应中获得了这个: <html> <head> <script type="text/javascript" src="javascript.js"> </head> <body> <p id="content"></p> <body> </html> 然后,我请求javascript.js文件,我得到这个: document.getElementById("content").text = "Hello"; 如何将javascript.js文件的内容应用到html文件中? 我应该遵循的步骤是类似于这样的吗? parsingHTML源到Javascript的DOM元素 将JavaScript应用于DOM 我想用Java,Scala或Node.js来做。 Idk如果你明白主要想法…我是拉丁美洲人,而且我的英语不太好。 对不起。 如果不理解,请在评论中告诉我,我将编辑我的post。 编辑:我想要做的,换句话说,就像这样的伪方法/函数(伪代码): function applu(html, js){ // Apply js into html }

无头的Chrome渲染整页

目前无头的Chrome的问题是,没有API来渲染整个页面,你只能得到你在CLI参数中设置的“窗口”。 我正在使用chrome-remote-interface模块,这是捕获的例子: const fs = require('fs'); const CDP = require('chrome-remote-interface'); CDP({ port: 9222 }, client => { // extract domains const {Network, Page} = client; Page.loadEventFired(() => { const startTime = Date.now(); setTimeout(() => { Page.captureScreenshot() .then(v => { let filename = `screenshot-${Date.now()}`; fs.writeFileSync(filename + '.png', v.data, 'base64'); console.log(`Image saved as ${filename}.png`); let imageEnd = […]

将JavaScript注入到zombie.js中

您好,我想知道是否有能力在节点js和僵尸js注入javascript文件到无头浏览器,类似于你可以用phantomjs做什么。 例如在幻影js你会做: page.injectJs("amino/TVI.js") 我已经使用phantomjs,它做了我想要做的事情,但是我正在testing其他选项,因为使用幻像js所需的高内存。

通过Nightmare.js在linux服务器上无线运行电子(primefaces壳)

我正在构build一个刮板,使JS单页应用程序容易抓取。 在PhantomJS (内存泄漏,过时的webkit,不死的进程,以及许多其他问题)之后,我决定改用NightmareJS ,它可以做同样的事情,但是使用Electron 。 电子有很多优点(使用最新的铬 ,速度要快得多),但它需要一台X服务器才能运行。 因为我需要在Ubuntu服务器下工作,所以我遵循了这个要求 。 现在我有一个很棒的EC2实例,一切准备好运行一个无头电子 xvfb-run electron 关键是我需要通过nightmareJS(我将在一个node.js服务器脚本中使用)来运行。 我想知道如何将parameter passing给恶梦,以便通过svfb启动电子

无头铬代理服务器设置

任何人都可以帮助我设置代理服务器无头铬,而在这里提到的Node.js使用灯塔铬启动器 const launcher = new ChromeLauncher({ port: 9222, autoSelectChrome: true, // False to manually select which Chrome install. additionalFlags: [ '–window-size=412,732', '–disable-gpu', '–proxy-server="IP:PORT"', headless ? '–headless' : '' ] }); 但是,上面的脚本根本不打我的代理服务器。 Chrome似乎回退到目标网站的DIRECT://连接。 另一个讨论在无头镀铬的情况下使用HTTP / HTTPS代理服务器的资源是这样的 。 但它没有给出任何如何使用Node.js的例子。