Ist es möglich, alle URIs einer bestimmten URL (Website) mit selenium zu durchlaufen?
Mein Ziel ist es, Firefox Browser mit Selen mit einer bestimmten URL meiner Wahl zu starten (Ich weiß, wie es dank dieser Website zu tun), und dann Firefox alle Seiten durchsuchen, die URL (Website) hat. Ich schätze jeden Hinweis/Hilfe, wie man es in Python macht.Wie kann man eine ganze Website mit Selen durchsuchen?
Antwort
Sie können eine rekursive Methode in einer Klasse wie der folgenden verwenden, um dies zu tun.
public class RecursiveLinkTest {
//list to save visited links
static List<String> linkAlreadyVisited = new ArrayList<String>();
WebDriver driver;
public RecursiveLinkTest(WebDriver driver) {
this.driver = driver;
}
public void linkTest() {
// loop over all the a elements in the page
for(WebElement link : driver.findElements(By.tagName("a")) {
// Check if link is displayed and not previously visited
if (link.isDisplayed()
&& !linkAlreadyVisited.contains(link.getText())) {
// add link to list of links already visited
linkAlreadyVisited.add(link.getText());
System.out.println(link.getText());
// click on the link. This opens a new page
link.click();
// call recursiveLinkTest on the new page
new RecursiveLinkTest(driver).linkTest();
}
}
driver.navigate().back();
}
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.get("http://newtours.demoaut.com/");
// start recursive linkText
new RecursiveLinkTest(driver).linkTest();
}
}
Hoffe das hilft Ihnen.
Ich denke, Sie haben es in Java programmiert. Ich werde versuchen, es in Python zu übersetzen. –
funktioniert es in Java in Ordnung. besucht alle Links auf der Website. – Sighil
Dieses Programm zählt auch die externen Links zur Website. Wie kann ich das vermeiden? Ich möchte alle Seiten der gleichen Website durchsuchen, kein externer Link. –
Selen API bietet alle Möglichkeiten, über die Sie verschiedene Operationen wie type, click, goto, navigateTo, wechseln zwischen Frames, Drag & Drop, etc. Was Sie tun wollen, ist nur in einfachen Begriffen Browsing, klicken und andere URLs innerhalb der Website auch bereitstellen, wenn ich richtig verstanden habe. Ja, Sie können es definitiv über Selenium webdriver tun. Und Sie können eine Eigenschaft Datei, für eine bessere Leichtigkeit und Bereitschaft, wo-in können Sie verschiedene Eigenschaften wie URLs, Base URI, etc. und machen die Automatisierung Tests über Selenium Webdriver in verschiedenen Browsern.
Kann ich mit 'Selen' die URIs innerhalb einer bestimmten URL erkennen (Browsing, wie Sie gesagt haben)? –
Wie Khyati erwähnt, ist es jedoch möglich, Selen nicht ein Webcrawler oder Roboter. Sie müssen wissen, wo/was Sie versuchen zu testen.
Wenn Sie wirklich diesen Weg gehen wollen, würde ich empfehlen, dass Sie die Seite drücken, ziehen Sie alle Elemente zurück und dann durch Klicken auf Elemente, die Navigationsfunktion entsprechen würde (zB "// a" oder Hyperlink klicken).
Obwohl, wenn Sie diesen Pfad gehen und es eine Seite gibt, die eine andere Seite öffnet, dann einen Link zurück hat, möchten Sie eine Liste aller besuchten URLs behalten und sicherstellen, dass Sie eine Seite nicht so duplizieren.
Das würde funktionieren, aber würde auch ein bisschen Logik erfordern, damit es passiert ... und Sie könnten sich in einer Endlosschleife finden, wenn Sie nicht vorsichtig sind.
Danke. Es scheint schwierig ... –
Dies ist möglich. Ich habe dies mit Java-Webdriver und URI implementiert. Dies wurde hauptsächlich erstellt, um die fehlerhaften Links zu identifizieren.
Verwenden Sie "getElements" mit Tag kann mit Webdriver erhalten einmal geöffnet und speichern "href" -Wert.
Überprüfen Sie alle Link-Status mit URL-Klasse von Java und legen Sie es im Stapel.
Dann Pop-Link vom Stapel und "Get" Link mit Webdriver. Erneut alle Links von der Seite entfernen doppelte Links, die im Stapel vorhanden sind.
Wiederholen Sie dies, bis der Stapel leer ist.
Sie können es gemäß Ihren Anforderungen aktualisieren. Wie die Ebenen des Traversierens, ausgenommen andere Links, die keine Domain der gegebenen Website usw. haben.
Bitte kommentieren Sie, wenn Sie Schwierigkeiten bei der Implementierung haben.
Wenn ich Firefox mit jedem URI durch "Get" starte, würde Firefox nicht einfrieren und nicht antworten? –
@begeradj Sie initialisieren den Browser nicht, Sie öffnen nur die URL im Browser und verwenden dann die Seite, um die URLs zu erhalten. – lAH2iV
Mein Ziel ist es, dass firefox alle URIs der URL durchsucht –
Ich weiß, dass Sie nach einem Python-Beispiel gefragt haben, aber ich war gerade dabei, einen einfachen Repo für Winkelmessertests zu erstellen und die Aufgabe, die Sie ausführen wollen, scheint mit Winkelmesser sehr einfach zu sein (was einfach ist ein Wrapper um WebDriver)
hier ist der Code in Javascript:
describe('stackoverflow scrapping', function() {
var ptor = protractor.getInstance();
beforeEach(function() {
browser.ignoreSynchronization = true;
});
afterEach(function() {
});
it('should find the number of links in a given url', function() {
browser.get('http://stackoverflow.com/questions/24257802/how-to-browse-a-whole-website-using-selenium');
var script = function() {
var cb = arguments[ 0 ];
var nodes = document.querySelectorAll('a');
nodes = [].slice.call(nodes).map(function (a) {
return a.href;
});
cb(nodes);
};
ptor.executeAsyncScript(script).then(function (res) {
var visit = function (url) {
console.log('visiting url', url);
browser.get(url);
return ptor.sleep(1000);
};
var doVisit = function() {
var url = res.pop();
if (url) {
visit(url).then(doVisit);
} else {
console.log('done visiting pages');
}
};
doVisit();
});
});
});
Sie die repo von here
Hinweis klonen: ich weiß Winkelmesser wahrscheinlich nicht das beste Werkzeug ist, aber es war so einfach Ich mache es damit, dass ich es einfach versuche.
Ich habe dies mit Firefox getestet (Sie können die firefox-conf Zweig dafür verwenden, aber es wird erfordern, dass Sie Webdriver manuell auslösen) und Chrom. Wenn Sie osx verwenden, sollte dies ohne Probleme funktionieren (vorausgesetzt, Sie haben nodejs installiert)
- 1. Durchsuchen Sie das ganze Projekt
- 2. Wie kann man am besten eine Website durchsuchen und Daten in PHP abrufen?
- 3. Wie lassen sich mit fminsearch nur ganze Zahlen durchsuchen?
- 4. Login Website mit Python Selen
- 5. eine ganze Website in C# herunterladen
- 6. CSS reverse eine ganze Website (Spiegeleffekt)
- 7. Durchsuchen Sie eine andere Website in MVC-Anwendung
- 8. Wie man ganze Wikipedia kriecht?
- 9. Wie kann man web.config vom Durchsuchen des Verzeichnisses ausblenden?
- 10. Wie man eine Website mit https
- 11. Wie man eine reaktionsschnelle Website mit ReactJs
- 12. Scrapy - Crawl ganze Website
- 13. Anwenden einer einzelnen Schriftart auf eine ganze Website mit CSS
- 14. Wie kann man eine ganze Zahl in PHP korrekt analysieren?
- 15. Wie kann man eine ganze Tabelle in Markdown (Pandoc) ausrichten?
- 16. Wie man eine Website ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY
- 17. Java, wie man eine ganze Liste wirft
- 18. Wie kann ich eine XSS-infizierte Joomla-Website für Wiederherstellungszwecke durchsuchen, ohne infiziert zu sein?
- 19. ganze Website in Unterordner umleiten
- 20. Wie durchläuft man eine Tabelle in Selen?
- 21. Kann VB.NET-Website auf Azure von externem Browser nicht durchsuchen
- 22. Wie sperrt man eine ganze Tabelle in symfony2 mit doctrine2?
- 23. Eine Sammlung mit LINQ durchsuchen
- 24. Wie behandelt man eine Datei-Upload-Taste mit Selen?
- 25. Wie aktualisiert man eine Seite im Browser mit selen-webdriver?
- 26. Wie überprüft man, dass eine Verbindung aktiv ist mit Selen
- 27. Wie man nicht eine ganze Zeichenkette mit jinja2 rendert
- 28. Wie liest man eine ganze Zahl in Exponentialform mit Haskell?
- 29. Wie erstellt man eine ganze Zahl mit Sqlalchemy?
- 30. Wie kann man eine datengesteuerte ORM-Website stresstesten?
Sie müssen wirklich alle Links auf einer Website folgen? Was ist die Motivation? Welche Art von Daten möchten Sie von der Website erhalten? Ist Web-Crawling für die Website erlaubt? Bietet es eine API? Was ist mit externen Links zu verschiedenen Domains? Warum brauchst du einen echten Browser (Selen)? Vielen Dank. – alecxe
Und was bedeutet "eine ganze Website durchsuchen" sogar hier? Suchen Sie nur nach HTML oder benötigen Sie auch JavaScript, CSS, Bilder, Schriftarten und Downloads? Wie erwartest du mit diesem 'Super Crawler' von Python zu interagieren? Mit anderen Worten: Welches Problem versuchen Sie hier zu lösen? –
Ich glaube, Selen ist kein geeignetes Werkzeug dafür. Selenium soll Ihnen die Möglichkeit bieten, automatisierte Tests über die Benutzeroberfläche durchzuführen. Wenn Sie einen Crawler benötigen, werfen Sie einen Blick auf http://www.portent.com/blog/random/python-web-crawler-code.htm oder schreiben Sie Ihren eigenen. – olyv