Ich werde eine Anwendung zusammenstellen, um eine externe Website / Anwendung zu automatisieren. In einigen Fällen muss ich wie ein Benutzer auf der Website navigieren (einige Links, denen ich folgen muss, können nicht vorhergesagt werden und müssen aus einer Antwort analysiert werden).
Ich verwende bereits das Html Agility Pack und bin mir Tidy bewusst, wenn dies erforderlich ist.
Gibt es andere Technologien, die ich kennen sollte?
Gibt es empfohlene Muster, um sich schnell anpassen zu können, falls sich die externe Web-App ändert? Ich stelle mir vor, die Validierung von Antworten als eine Art Strategie oder ein ähnliches Muster zu kapseln, das bei Bedarf leicht getrennt / eingesteckt werden kann, aber spezifische Vorschläge wären großartig.
c#
.net
html
web-scraping
jlnorsworthy
quelle
quelle
Antworten:
Wenn Sie die Navigation einer externen Website wie ein Benutzer automatisieren möchten, ist Watin genau das Richtige für Sie. Es steuert einen Webbrowser durch ein Objektmodell und verfügt über eine breite Palette von Analysefunktionen, die auf dem DOM basieren (sowie Nicht-DOM-Funktionen, die Sie in einem Browser finden würden, einschließlich Skripten).
Hier ist ein Link:
Watin.org
quelle
Wenn Sie nach der Möglichkeit suchen, schnell Änderungen vorzunehmen, um diese in der externen Web-App zu verfolgen, dann würde ich mir die Skripterstellung ansehen. Wenn C # Ihre bevorzugte Sprache ist, sehen Sie sich das schnelle Kompilieren von Code an. Wenn Sie eine Datenbank verwenden, kann der Skriptcode dort gespeichert werden, andernfalls funktionieren auch Nur-Text-Dateien.
In Bezug auf GoF-Muster ist Strategie die Wahl des Lehrbuchs.
Das andere zu berücksichtigende "Muster", insbesondere da Sie die Validierung von Antworten zur Auswahl der nächsten Aktion erwähnt haben, ist eine Maschine mit endlichem Zustand . Beispielsweise könnten die Status für einen Webmail-Client "nicht angemeldet", "im Posteingang", "Nachricht lesen", "Antwort bearbeiten" usw. sein. Sie würden je nach Status eine Aktion ausführen und dann basierend auf Wählen Sie in der Antwort den nächsten Status aus.
quelle
Das Muster sollte eigentlich aus dem Problem stammen, aber hier sind einige Möglichkeiten:
Wenn Sie sich hauptsächlich mit laufenden Entwicklungskosten / Ärger befassen: Strategiemuster (bereits erwähnt) - Verwenden Sie dieses, um die Schnittstellen auf Komponentenebene zu implementieren, und verwenden Sie eine dynamische Bindungsmethode, um bestimmte Strategien (Implementierungen) aufzulösen. Ein IOC-Container (ich mag Autofac heutzutage) würde gut funktionieren.
Wenn Sie das oben genannte Plus unterstützen müssen, müssen Sie skalieren: Map Reduce (kennt jemand einen guten m + r fx für .net?).
quelle
Je nachdem, wie stark sich die Webseite ändert, kann dies schwierig sein. Sie können eine Liste der regulären Standardausdrücke in einer Datenbank aufbewahren. Wenn einer nicht mehr funktioniert, können Sie den Basissatz mit anderen durchlaufen, bis Sie einen treffen. Dann möchten Sie dies für die zukünftige Verwendung markieren.
quelle