2014-12-21 18 views
5

Tôi đang cố gắng phân tích một số cột trong một bảng thành từ điển bằng Selenium, nhưng những gì tôi có vẻ chậm. Tôi đang sử dụng python, Selenium 2.0 và webdriver.Chrome()Lấy văn bản của bảng một cách nhanh chóng trong 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} 

Vấn đề dường như nhận được thuộc tính 'văn bản' của từng phần tử td. Có cách nào nhanh hơn không?

+0

Bạn có bị ngoại lệ không? hoặc chỉ thực hiện chậm? Nếu nó chỉ là chậm thì việc tìm kiếm phần tử bằng 'xpath' hoặc' css' có thể nhanh hơn một chút. – Saifur

+0

Không có ngoại lệ, nó chỉ mất một lúc để xử lý mỗi hàng. – PearSquirrel

+1

Lưu ý rằng row.find_elements_by_tag_name khá nhanh. Nó chỉ là 'ô [#]. Văn bản' làm chậm mọi thứ xuống – PearSquirrel

Trả lời

6

Tùy chọn thay thế.

Nếu sau (sau vòng lặp), bạn không cần tương tác mà selen cung cấp cho bạn - bạn có thể vượt qua HTML source code hiện tại của trang đến lxml.html, được biết đến với tốc độ của nó. Ví dụ:

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

Điều đó làm việc như một sự quyến rũ. Cảm ơn bạn! – PearSquirrel

+0

@PearSquirrel tuyệt vời! Bạn đã đo nhanh hơn bao nhiêu so với phương pháp selen nguyên chất? Cảm ơn. – alecxe

+0

Nó được sử dụng để mất ~ 5 giây để xử lý, bây giờ phải mất ~ .1 giây – PearSquirrel

Các vấn đề liên quan