Después de publicar Telegram Status Monitor, he recibido bastantes peticiones de gente interesada en esa misma solución, pero para WhatsApp. Es decir, poder saber los cambios de estado de un contacto, pese a que tenga oculta la hora de la última actividad. Para eso está WhatsApp Status Monitor.

Se encarga de supervisar el estado del contacto seleccionado cada segundo, y registrar en la consola del navegador, cuando éste cambia. Así podrás saber a qué horas se conectó, cuanto rato estuvo activo, etcétera.

Supongo que hay muchos usos para este tipo de soluciones. El caso, es que si lo que necesitas, es poder registrar los cambios de estado que se producen en un contacto de WhatsApp, puedes aprovechar WhatsApp Web, y ejecutar este script en tu navegador.

Usarlo es muy sencillo:
1) Accede a web.whatsapp.com normalmente.
2) Escoge el contacto a supervisar.
3) Abre la ventana de chat con él.
4) Abre la consola de depuración de tu navegador (CTRL-SHIFT-I), y pega el código que se muestra a continuación al completo.
5) Pulsa ENTER.

En la consola de depuración, irás viendo entradas como estas:
[WHATSAPP MONITOR] 12/4/2017 10:52:02 Javier Gutiérrez en línea
[WHATSAPP MONITOR] 12/4/2017 10:52:35 Javier Gutiérrez
[WHATSAPP MONITOR] 12/4/2017 10:56:04 Javier Gutiérrez en línea
[WHATSAPP MONITOR] 12/4/2017 10:56:33 Javier Gutiérrez escribiendo…
[WHATSAPP MONITOR] 12/4/2017 10:57:01 Javier Gutiérrez en línea
[WHATSAPP MONITOR] 12/4/2017 10:57:26 Javier Gutiérrez

Si te es más cómodo, puedes aplicar un filtro en la consola, para mostrar todas las salidas de tipo INFO, que contengan el texto [WHATSAPP MONITOR], y así tendrás un registro limpio de advertencias y errores del navegador.

A diferencia de Telegram Web, WhatsApp Web, funciona conectado a tu teléfono, así que mientras se esté ejecutando el script, tendrás que tener encendido el teléfono (aunque no hace falta que la app esté abierta), y con conectividad a internet. Idealmente con WiFi, para evitar consumir los datos disponibles. Lo bueno, es que al ser independiente del teléfono, no aparecerás como “En linea” mientras se esté ejecutando.

Igual que ocurría con el Telegram Status Monitor, en muchos navegadores web, cuando la pestaña no está activa, a veces suspenden la ejecución de código con el fin de ahorrar energía. Por lo que te recomiendo que la dejes abierta en primer plano.

/**
* Logs WhatsApp Web (web.whatsapp.com) status changes for the selected contact.
* Very useful for monitorying in background "Online" / "En línea" for a particular chat.
* Open WhatsApp Web as usual, go to the contact you want to monitor, and then execute this code.
* In Chrome/Chromium/Opera/Vivaldi and Firefox/SeaMonkey, press CTRL-SHIFT-I to open the Developer Console, and then paste the whole contents and press ENTER.
* @summary WhatsApp Web Status Monitor.
* @version 1.1 (2017/09/05)
* @license LGPL
* @author Javier Gutiérrez Chamorro (Guti) - http://www.javiergutierrezchamorro.com
*/
"use strict";
var msStatus = '';
setInterval(function()
{
	var sNewStatus;
	var sContact = '';
	if ((document.getElementsByClassName('pane-header pane-chat-header')) && (document.getElementsByClassName('pane-header pane-chat-header').length > 0) && (document.getElementsByClassName('pane-header pane-chat-header')[0].getElementsByClassName('emojitext ellipsify')))
	{
		sContact = document.getElementsByClassName('pane-header pane-chat-header')[0].getElementsByClassName('emojitext ellipsify')[0].innerText;
	}
	if (document.getElementsByClassName('emojitext chat-subtitle-text')[0])
	{
		sNewStatus = document.getElementsByClassName('emojitext chat-subtitle-text')[0].innerText;
	}
	else
	{
		sNewStatus = '';
	}
	if (sNewStatus != msStatus)
	{
		msStatus = sNewStatus;
		console.log('[WHATSAPP MONITOR] ' + new Date().toLocaleString() + ' ' + sContact + ' ' + msStatus);
	}
}, 1000);

Actualizado a martes 5 de septiembre de 2017. 17:09:
A petición de Javi, he hecho una actualización rápida del script con los últimos cambios en WhatsApp Web. Éstos sólo afectaban a la forma de obtener el estado, y el resto queda igual. Lo he verificado por encima con Opera 49.