Ich versuche, alert
von der Website zu sammeln, indem Sie die Methode überschreiben verwenden. Ich suchte auf Google und fand wappalyzer, eine Chrome/Firefox-Erweiterung, um Software auf der Website zu erkennen. Es injiziert ein Skript inject.js
beim Laden und Sammeln von Informationen. Meine Methode ist ähnlich. Ich mache eine lokale Website und teste sie. Wenn ich overwrite_alert.js
manuell injiziere, dann funktioniert es.Wie kann ich JS injizieren und eine Warnmeldung von der Website sammeln?
Aber ich möchte es dynamisch tun und auf andere Website anwenden. Also benutze ich Headless Browser wie PhantomJS. Der folgende Code, den ich in PhantomJS ausprobiert habe, funktioniert aber nicht.
Ich versuche, ein JavaScript auf Phantom JS zu injizieren. Wie dieser Code:
<!DOCTYPE html>
<html>
<head>
<title>Test alert</title>
<!-- !!! Inject here !!! <script src="overwrite_alert.js"></script> -->
<script type="text/javascript" src="other_script.js"> </script>
<script type="text/javascript">
alert("Alert content");
</script>
</head>
<body>
<h1>website content</h1>
</body>
</html>
overwrite_alert.js
Datei von this question:
(function() {
var _alert = window.alert; // <-- Reference
window.alert = function(str) {
// do something additional
if(console) console.log(str);
//return _alert.apply(this, arguments); // <-- The universal method
_alert(str); // Suits for this case
};
})();
Ich habe versucht, mit onLoadStarted
Ereignis und My PhantomJS Code:
var webPage = require('webpage');
var page = webPage.create();
var url = "https://localhost:5000/alert.html";
page.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log('CONSOLE> ' + msg);
};
page.onLoadStarted = function() {
if (page.injectJs('do.js')) {
var title = page.evaluate(function() {
// returnTitle is a function loaded from our do.js file - see below
console.log("evaluate completed");
});
console.log(title);
}
}
page.open(url, function(status) {
if (status === "success") {
if (page.injectJs('do.js')) {
var title = page.evaluate(function() {
// returnTitle is a function loaded from our do.js file - see below
console.log("evaluate completed");
});
console.log(title);
phantom.exit();
}
page.render("onOpen.png");
}
});
Ergebnis:
$ phantomjs test_inject.js
CONSOLE> from onLoadStarted completed
null
CONSOLE> from page.open
null
'page.onInitialized' und' page.onLoadStarted' funktionieren nicht. Ich möchte die Methode überschreiben, weil ich in Zukunft nicht nur eine "Alarm" -Funktion, sondern auch eine andere Funktion implementieren werde. –
Ich kann Ihr Problem nicht reproduzieren. Es funktioniert für mich: https://gist.github.com/artjomb/3867677bf4a9a97966879d49e6594943 –
Es funktioniert wie ein Charme. Vielen Dank. –