2015-06-21 15 views
5

Tôi sử dụng Regex để truy xuất nội dung nhất định từ hộp tìm kiếm trên trang web có selenium.webDriver.Python regex AttributeError: đối tượng 'NoneType' không có thuộc tính 'group'

searchbox = driver.find_element_by_class_name("searchbox") 
searchbox_result = re.match(r"^.*(?=(\())", searchbox).group() 

Mã hoạt động miễn là hộp tìm kiếm trả lại kết quả phù hợp với Regex. Nhưng nếu hộp tìm kiếm trả lời với chuỗi "No results" tôi nhận được lỗi:

AttributeError: 'NoneType' object has no attribute 'group'

Làm thế nào tôi có thể làm cho kịch bản xử lý các tình huống "No results"?

Trả lời

6

Tôi đã tìm ra giải pháp này, nó phải làm với neglectin g group() cho trường hợp trả lời hộp tìm kiếm là "No results" và do đó không khớp với Regex.

try: 
    searchbox_result = re.match("^.*(?=(\())", searchbox.group() 
except AttributeError: 
    searchbox_result = re.match("^.*(?=(\())", searchbox) 

hoặc đơn giản là:

try: 
    searchbox_result = re.match("^.*(?=(\())", searchbox.group() 
except: 
    searchbox_result = None 
3

Khi bạn làm

re.match("^.*(?=(\())", search_result.text) 

sau đó nếu không phù hợp đã được tìm thấy, None sẽ được trả lại:

Return None if the string does not match the pattern; note that this is different from a zero-length match.

Bạn nên kiểm tra xem bạn có một kết quả trước khi bạn áp dụng group vào nó:

res = re.match("^.*(?=(\())", search_result.text) 
if res: 
    # ... 
+0

Cảm ơn, có thể giúp bạn đưa ra một ví dụ cụ thể hơn về mã? Về cơ bản tôi muốn nó viết '" "' thành 'res' nếu nó không tìm thấy gì cả. Hoặc cách khác, 'pass' nếu sử dụng' except'. – Winterflags

+0

@Winterflags Bạn có thể kiểm tra 'res is None', nếu có, thay đổi nó thành' "" '. – Maroun

+0

@Winterflags Cũng lưu ý rằng regex của bạn là tham lam, nó khớp với "abc (def" trong chuỗi sau 'abc (def ('. Đó là những gì bạn muốn? – Maroun

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