2014-12-21 8 views
5

erhalten Ich versuche, eine Anzahl von Spalten in einer Tabelle in ein Wörterbuch mit Selenium zu analysieren, aber was ich habe, scheint langsam. Ich verwende Python, Selenium 2.0 und webdriver.Chrome()Text einer Tabelle schnell in Selenium

table = self.driver.find_element_by_id("thetable") 
    # now get all the TR elements from the table 
    all_rows = table.find_elements_by_tag_name("tr") 

    # and iterate over them, getting the cells 
    for row in all_rows: 
     cells = row.find_elements_by_tag_name("td") 
     # slowwwwwwwwwwwwww 
     dict_value = {'0th': cells[0].text, 
       '1st': cells[1].text, 
       '2nd': cells[2].text, 
       '3rd': cells[3].text, 
       '6th': cells[6].text, 
       '7th': cells[7].text, 
       '10th': cells[10].text} 

Das Problem scheint das 'text' Attribut jedes td Element zu bekommen. Gibt es einen schnelleren Weg?

+0

Erhalten Sie eine Ausnahme? oder nur langsame Ausführung? Wenn es nur langsam ist, kann das Suchen von Elementen mit 'xpath' oder' css' etwas schneller sein. – Saifur

+0

Keine Ausnahme, es dauert nur eine Weile, um jede Zeile zu verarbeiten. – PearSquirrel

+1

Beachten Sie, dass row.find_elements_by_tag_name ziemlich schnell ist. Es ist nur der 'cells [#] .text', der alles verlangsamt – PearSquirrel

Antwort

6

Alternative Option.

Wenn Sie später (nach der Schleife) keine Interaktivität benötigen, die Ihnen Selen zur Verfügung stellt, können Sie die aktuelle HTML source code der Seite an lxml.html übergeben, die für ihre Geschwindigkeit bekannt ist. Beispiel:

import lxml.html 

root = lxml.html.fromstring(driver.page_source) 
for row in root.xpath('.//table[@id="thetable"]//tr'): 
    cells = row.xpath('.//td/text()') 
    dict_value = {'0th': cells[0], 
        '1st': cells[1], 
        '2nd': cells[2], 
        '3rd': cells[3], 
        '6th': cells[6], 
        '7th': cells[7], 
        '10th': cells[10]} 
+0

Das hat wie ein Zauber funktioniert. Vielen Dank! – PearSquirrel

+0

@PearSquirrel großartig! Haben Sie gemessen, wie viel schneller es im Vergleich zu reinem Selen-Ansatz funktioniert? Vielen Dank. – alecxe

+0

Es dauerte ~ 5 Sekunden zu verarbeiten, jetzt dauert es ~ 0,1 Sekunden – PearSquirrel

Verwandte Themen