Como estas manejando la carga de la pagina? yo llevo bastante tiempo usando Greasemonkey.
Si tenes jquery disponible en la web que vas a automatizar es de mucha ayuda, pero sino igual se puede con js vanilla.
Yo lo que hago es esto:
1) encapsular toda mis funcionalidades de greasemonkey dentro de una solo funcion. Puedo modular mi codigo dentro de muchas funciones globales, pero al final toda la logica y la llamada a estas funciones mias las encapsulo en una sola funcion, por ejemplo digamos que se llama "gm_main".
2) En mi script de greasemonkey ejecuto una funcion auto-ejecutable, y dentro de esta asigno un event handler al evento onload de body. Y a dicho handler le paso mi funcion gm_main, de modo que esta se ejecutara recien cuando el DOM ya este 100% cargado y renderizado, junto con todos sus scripts, imagenes, etc.
Algo asi:
// ==UserScript==
// @name ScriptDePrueba
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Script de prueba
// @author unsigned
// @match https://tu-web.target.com/la_pagina.php
// @grant none
// ==/UserScript==
function gm_main(){
// 1. Create the button
var button = document.createElement("button");
button.innerHTML = "Do Something";
// 2. Append somewhere
var body = document.getElementsByTagName("body")[0];
body.appendChild(button);
// 3. Add event handler
button.addEventListener ("click", function() {
alert(document.getElementById("interContainer").innerHTML);
});
}
(function() {
'use strict';
window.onload = gm_main();
})();
Lo que si, te aconsejo de debugges tu script de greasemonkey en la consola del navegador, para ver que puede estar fallando. Te dejo un script de ejemplo basado en el tuyo para agregar un boton al index de este foro que al presionarlo te muestre un alert con tu username.
// ==UserScript==
// @name ScriptDePrueba
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Script de prueba
// @author unsigned
// @match https://foro.elhacker.net/index.php
// @grant none
// ==/UserScript==
function gm_main(){
// 1. Create the button
var button = document.createElement("button");
button.innerHTML = "Do Something";
// 2. Append somewhere
var body = document.getElementsByTagName("body")[0];
body.appendChild(button);
// 3. Add event handler
button.addEventListener ("click", function() {
alert(`Hola ${document.querySelector(".profile_info> b").innerHTML}`);
});
}
(function() {
'use strict';
window.onload = gm_main();
})();
Como ves en la linea 7 de ambos scripts es necesario indicar la url donde el script se va a ejecutar, también podes usar wildcards como asteriscos para urls dinámicas. Si no pones correctamente esta URL tu script nunca se ejecutara. Tambien anda tirando algunos console.log para depurar, como te decia antes.