Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
HTMLWie unter Windows einen String auf einer Website suchen?
Es soll kurzfristig eine Liste mit in den Filialen verbauter Hardware erstellt werden, die über die https Website des Herstellers abgefragt werden kann. Dazu muss in Chrome/Edge/Firefox eine URL aufgerufen werden und beim Vorhandensein eines bestimmtem Strings im Text der Website JA in eine lokale Textdatei geschrieben werden. Womit lässt sich das am einfachsten bewerkstelligen?
Wenn Bash/Sh verfügbar ist und die typischen Bordmittel geht es einfach. Für Windows/PowerShell gibts sicherlich vergleichbare Befehle. Da kenn ich mich aber nicht aus.
Hier mal beispielhaft für example.com und den Text "aksing for permission", der auf der Seite auftaucht. Wenn dein String durch HTML-Tags unterbrochen ist, wird es komplexer und du brauchst evtl. einen Parser oder eine andere Technik um den reinen Text aus der Seite zu extrahieren. Das hier ist die absolute Billoversion.
Das hat mir ChatGPT ausgespuckt für die PowerShell (schreibt aber nicht in eine Datei):
Code:
# URL der HTML-Seite
$url = "https://www.example.com"
# Text, den du überprüfen möchtest
$desiredText = "gewünschter Text"
# HTML-Inhalt der Seite abrufen
$htmlContent = Invoke-WebRequest -Uri $url
# Überprüfen, ob der gewünschte Text im HTML-Inhalt enthalten ist
if ($htmlContent.Content -match $desiredText) {
Write-Output "Die HTML-Seite enthält den gewünschten Text."
} else {
Write-Output "Die HTML-Seite enthält nicht den gewünschten Text."
}
Als Ergänzung:
Wenn man dann noch grep hin zu nimmt, hat mans ja fast schon: curl -s myurl | grep -q "ABC" && echo "JA" > mytextfile.txt
(für myurl natürlich die richtige Adresse eintragen und für JA die gesuchte Zeichenkette; regexp möglich)
Danke, mit einer beliebigen URL funktioniert das sogar fast. Suche ich auf unserer Firmenwebseite nach der dort angegebenen Telefonnummer, gibt es einen Treffer; ändere ich eine Ziffer, so dass die Nummer nicht übereinstimmt, keinen, gut! Suche ich unsere Firmenseite allerdings nach dem gefragten String - A ab, kommt auch die Meldung, der sei gefunden worden, obwohl er nicht vorkommt, nicht einmal im Quelltext.
Noch problematischer scheint zu sein, dass die URL des Kunden auf .aspx mit ein paar angehängten Parametern endet. Führe ich das Skript mit dieser URL durch, kommt eine Fehlermeldung, in der die URL verhackstückt ist:
Invoke-WebRequest : Server Error in '/wwwroot' Application. Object reference not set to an instance of an object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace: [NullReferenceException: Object reference not set to an instance of an object.] wwwroot.custNet.Maintenance.Stores.OrganizationStoreConfiguration.createFloorsTable(DataTable pTable) in C:\Users\lokaal\Documents\GitHub\retail-custnet-maintenance\custMaintenance\custNet\Maintenance\Stores\OrganizationStoreConfigurat ion.aspx.cs:156 wwwroot.custNet.Maintenance.Stores.OrganizationStoreConfiguration.Page_Load(Object sender, EventArgs e) in C:\Users\ lokaal\Documents\GitHub\retail-custnet-maintenance\custMaintenance\custNet\Maintenance\Stores\OrganizationStoreConfigur ation.aspx.cs:71 System.EventHandler.Invoke(Object sender, EventArgs e) +0 System.Web.UI.Control.OnLoad(EventArgs e) +95 System.Web.UI.Control.LoadRecursive() +59 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +678 Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.7.4081.0 In C:\test\scrape.ps1:8 Zeichen:16 + $htmlContent = Invoke-WebRequest -Uri $url + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExc eption + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
Im Browser ja, aber nicht in einem privaten Fenster, da kommt dann auch die Fehlermeldung. Es scheint, als müsse man in dem Browser-Fenster eingeloggt sein, um diese Unterseite aufrufen zu können. Bin ich also in Chrome auf der Seite eingeloggt und kopiere den Link auf die gewünschte Unterseite, kann ich sie in Firefox nicht aufrufen. Ich muss mich erst in Firefox auch noch einloggen und dann funktioniert der Link.
Evtl. wird da ein Cookie für eine Session oder so gesetzt, das beim Zugriff über die Powershell fehlt.
Eine grundsätzliche Anmerkung dazu: Du solltest den Zyklus für die Aktualisierung nicht zu eng gestalten. Wenn dein scraper zu häufig bei der Webseite anklopft und womöglich auch Daten ausliest, die in der robots.txt eigentlich nicht "erlaubt" sind, kann das dem Betreiber der Webseite übel aufstoßen und wenn's ihm zu bunt wird, sperrt er eventuell sogar den Account. Sporadisches Auslesen ist halb so wild, aber .. .. was weiß ich.. sekündliche Preisaktualisierungen oder sowas können unerwünscht sein.