2016-06-30 11 views
0

Ich möchte den Dialogtext in einem Popup-Fenster crawlen. Das Problem ist, dass, nachdem ich die Verbindung ausgelöst habe, das Fenster erscheint, aber es scheint, dass der selen Treiber nicht automatisch damit umgehen kann, wie ich von anderen Fragen auf dieser Seite erfuhr, indem ich driver.window_handles eintrage. Die Quelle des Abzugs:Wie kann ich den Text aus einem Dialog mit Selen-Python erhalten?

enter image description here

Der Wert von len(driver.window_handles) ist 1. Ich dachte, dass ich das Fensterelement bekommen und erhalten dann den Text über die get_attributes, zum Glück gelang es mir durch

das Element immer
wd = driver.find_element_by_css_selector('div[node-type="repeat_list"]') 

selenium.webdriver.remote.webelement.WebElement (session = "f810cbbe-db43-4e8d-b484-664559ec8efc", Element = "{dd00e689-7991-44e9-85d3-76c69e79218f}")

Aber die traurige Sache ist, dass ich nicht weiß, wie man alle Sachen davon herausbekam, da ich ihre Attribute nicht kenne.

Ich bin nicht sicher, ob es ein Dialog ist, sagte mir ein Front-End-Ingenieur, dass es wie eine Animation aussieht. Auf jeden Fall ist dies der Quelle-Schnipsel:

enter image description here

PS: Der Browser ist Firefox.

Ich dachte, es könnte verletzen die Website Acceptable Use Policy zu crawlen dann sollte ich einige Informationen verbergen. Es tut uns leid.

+1

Können Sie den 'HTML' teilen, mit dem Sie arbeiten? – RemcoW

+0

ist es ein Fenster Popup oder ein neues Fenster – SaiPawan

+0

@sai Ein Fenster Popup, methinks. Allerdings habe ich den Dialogtext aus dem Subelement des Elements "wd" geholt. Ich möchte wissen, wie man mit dem Popup-Dialogfenster arbeitet, um meine bestehende Lösung zu optimieren. – lerner

Antwort

0

Sobald Sie Ihr übergeordnetes Element haben:

wd = driver.find_element_by_css_selector('div[node-type="repeat_list"]') 

Sie auch weiterhin Methoden für dieses Objekt aufrufen, und in dieser Reihenfolge die Kinder Elemente erreichen, können Sie element_by_xpath oder find element_by_class name finden, zum Beispiel verwenden:

wd = driver.find_element_by_css_selector('div[node-type="repeat_list"]') 
wd.find_element_by_class_name("list_box").find_element_by_class_name("list_ul").find_elements_by_class_name("list_li S_line1 clearfix") 

und so weiter, bis Sie das gewünschte Element in der Hierarchie erreichen und den Inhalt wie gewünscht extrahieren.

Ich hoffe, das hilft!

+0

Sie haben Recht, aber ich denke, dass es eine Methode für das Dialogfenster gibt. – lerner

+0

Es gibt keine solche Methode in Selen. Wie Sie oben erwähnt haben, ist das len (driver.window.handles) 1, daher wird das Dialogfenster als Teil der aktuellen HTML-Seite betrachtet, auf die sich der Fahrer konzentriert. In Selen gibt es Methoden, um Alerts zu bearbeiten, aber nur, weil ein Alert vorhanden ist Eine spezielle Art von Ereignis, das vom Browser ausgelöst wird. Sobald das Dialogfeld Teil der HTML-Hierarchie ist, müssen Sie es als solches behandeln. –