Khi sử dụng Selenium WebDriver, bạn có thể gặp phải tình huống cần cuộn một phần tử vào chế độ xem
Bằng cách chạy các lệnh trong các bước sau, bạn có thể tương tác thử một giải pháp bằng Google Chrome
1. Thiết lập môi trường đầu và cài đặt gói Selenium
Thói quen thông thường của tôi khi bắt đầu một dự án đầu như thế này là thiết lập một môi trường Python sạch với virtualenv
# In your shell: mkdir scrolling cd scrolling/ virtualenv env . env/bin/activate pip install selenium
2. Khởi chạy trình thông dịch Python, mở phiên Chrome bằng gói selen và điều hướng đến Google Tin tức
$ python ... >>> from selenium import webdriver >>> d = webdriver.Chrome[] >>> d.get["//news.google.com/"]
3. Xác định phần tử dùng làm tiêu đề cho phần "Phổ biến nhất" của trang, sau đó cuộn đến phần tử đó bằng cách thực thi hàm JavaScript scrollIntoView[]
>>> element = d.find_element_by_xpath["//span[.='Most popular']"] >>> element.text u'Most popular' >>> d.execute_script["return arguments[0].scrollIntoView[];", element]
Lưu ý rằng các liên kết Python WebDriver cũng cung cấp thuộc tính hiện cuộn phần tử vào chế độ xem khi được truy xuất
Tuy nhiên, thuộc tính đó được ghi chú trong tài liệu mô-đun selen là có thể thay đổi mà không có cảnh báo - và nó cũng đặt phần tử ở cuối chế độ xem [chứ không phải trên cùng], vì vậy tôi thích sử dụng scrollIntoView[]
4. Cuộn phần tử xuống một vài px về phía trung tâm của chế độ xem, nếu cần
Sau khi mã ở trên cuộn phần tử lên trên cùng của cửa sổ, bạn có thể thấy mình cần cuộn tài liệu ngược lại để di chuyển phần tử một chút về phía giữa cửa sổ - điều này có thể cần thiết nếu phần tử bị ẩn dưới phần tử khác [ví dụ:
Việc cuộn như vậy rất dễ thực hiện - JS này cuộn tài liệu về phía sau 150px, đặt phần tử của bạn gần trung tâm của chế độ xem hơn
>>> d.execute_script["window.scrollBy[0, -150];"]
Đó là tất cả cho bây giờ;
Nói chung, tất cả các thao tác thú vị tương tác với tài liệu sẽ được thực hiện thông qua giao diện này
Tất cả các cuộc gọi phương thức sẽ thực hiện kiểm tra độ mới để đảm bảo rằng tham chiếu phần tử vẫn hợp lệ. Về cơ bản, điều này xác định xem phần tử có còn được gắn vào DOM hay không. Nếu thử nghiệm này không thành công, thì một
element = element.find_elements[By.CLASS_NAME, 'foo']7 sẽ bị ném và tất cả các lần gọi tới phiên bản này trong tương lai sẽ không thành công
element = element.find_elements[By.CLASS_NAME, 'foo']8
Trả về Cấp độ ARIA của phần tử web hiện tại
element = element.find_elements[By.CLASS_NAME, 'foo']9
Trả về vai trò ARIA của phần tử web hiện tại
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]0 []→ Không có
Xóa văn bản nếu đó là thành phần nhập văn bản
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]1 []→ Không có
Nhấp vào phần tử
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]2 [ by='id', value=None ]→ selen. webdriver. Xa xôi. phần tử web. WebYếu tố
Tìm phần tử đã cho a Bằng chiến lược và bộ định vị
Cách sử dụngelement = element.find_element[By.ID, 'foo']loại trả lại
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]3 [ by='id', value=None ]→ danh sách
Tìm các phần tử đã cho a Theo chiến lược và định vị
Cách sử dụngelement = element.find_elements[By.CLASS_NAME, 'foo']loại trả lại
danh sách WebElement
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]4 [ tên ]→ str
Nhận thuộc tính hoặc thuộc tính đã cho của phần tử
Phương thức này trước tiên sẽ cố gắng trả về giá trị của thuộc tính có tên đã cho. Nếu một thuộc tính có tên đó không tồn tại, nó sẽ trả về giá trị của thuộc tính có cùng tên. Nếu không có thuộc tính nào có tên đó, thì trả về
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]5
Các giá trị được coi là trung thực, tương đương với “true” hoặc “false”, được trả về dưới dạng boolean. Tất cả các giá trị khác không phải ______7_______5 được trả về dưới dạng chuỗi. Đối với các thuộc tính hoặc thuộc tính không tồn tại,
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]5 được trả về
Để có được giá trị chính xác của thuộc tính hoặc thuộc tính, hãy sử dụng các phương pháp
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]8 hoặc
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]9 tương ứnglập luận
- name - Tên của thuộc tính/thuộc tính cần truy xuất
Thí dụ
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]
text_length = target_element.get_dom_attribute["class"]0 [ tên ]→ str
Lấy thuộc tính đã cho của phần tử. Không giống như
text_length = target_element.get_dom_attribute["class"]1, phương thức này chỉ trả về các thuộc tính được khai báo trong phần đánh dấu HTML của phần tử
- name - Tên của thuộc tính cần truy xuất
text_length = target_element.get_dom_attribute["class"]
text_length = target_element.get_dom_attribute["class"]2 [ tên ]→ str. bool. WebYếu tố. mệnh lệnh
Lấy thuộc tính đã cho của phần tử
lập luận- name - Tên của tài sản để lấy
text_length = target_element.get_property["text_length"]
text_length = target_element.get_dom_attribute["class"]3
ID nội bộ được sử dụng bởi Selenium
Cái này chủ yếu dùng nội bộ. Các trường hợp sử dụng đơn giản như kiểm tra xem 2 phần tử web có tham chiếu đến cùng một phần tử hay không, có thể được thực hiện bằng cách sử dụng
text_length = target_element.get_dom_attribute["class"]4
if element1 == element2: print["These 2 are equal"]
text_length = target_element.get_dom_attribute["class"]5 []→ bool
Liệu phần tử có hiển thị với người dùng hay không
text_length = target_element.get_dom_attribute["class"]6 []→ bool
Trả về xem phần tử có được bật hay không
text_length = target_element.get_dom_attribute["class"]7 []→ bool
Trả về phần tử có được chọn hay không
Có thể được sử dụng để kiểm tra xem hộp kiểm hoặc nút radio có được chọn không
text_length = target_element.get_dom_attribute["class"]8
Vị trí của phần tử trong canvas có thể hiển thị
text_length = target_element.get_dom_attribute["class"]9
TÀI SẢN NÀY CÓ THỂ THAY ĐỔI MÀ KHÔNG CÓ CẢNH BÁO. Sử dụng công cụ này để khám phá vị trí của một phần tử trên màn hình để chúng ta có thể nhấp vào phần tử đó. Phương pháp này sẽ khiến phần tử được cuộn vào chế độ xem
Trả về vị trí góc trên cùng bên trái trên màn hình hoặc
# Check if the "active" CSS class is applied to an element. is_active = "active" in target_element.get_attribute["class"]5 nếu phần tử không hiển thị
text_length = target_element.get_property["text_length"]1
Tham chiếu nội bộ đến phiên bản WebDriver, phần tử này được tìm thấy từ
text_length = target_element.get_property["text_length"]2
Một từ điển với kích thước và vị trí của phần tử
text_length = target_element.get_property["text_length"]3 [ tên tệp ]→ bool
Lưu ảnh chụp màn hình của phần tử hiện tại vào tệp hình ảnh PNG. Trả về Sai nếu có bất kỳ IOError nào, ngược lại trả về True. Sử dụng đường dẫn đầy đủ trong tên tệp của bạn
lập luận- tên tập tin. Đường dẫn đầy đủ mà bạn muốn lưu ảnh chụp màn hình của mình vào. Điều này sẽ kết thúc với một. phần mở rộng png
element.screenshot['/Screenshots/foo.png']
text_length = target_element.get_property["text_length"]4
Nhận ảnh chụp màn hình của phần tử hiện tại dưới dạng chuỗi được mã hóa base64
Cách sử dụngimg_b64 = element.screenshot_as_base64
text_length = target_element.get_property["text_length"]5
Nhận ảnh chụp màn hình của phần tử hiện tại dưới dạng dữ liệu nhị phân
Cách sử dụngelement_png = element.screenshot_as_png
text_length = target_element.get_property["text_length"]6 [ *giá trị ]→ Không có
Mô phỏng gõ vào phần tử
lập luận- giá trị - Một chuỗi để nhập hoặc thiết lập các trường biểu mẫu. Để đặt đầu vào tệp, đây có thể là đường dẫn tệp cục bộ
Sử dụng điều này để gửi các sự kiện quan trọng đơn giản hoặc để điền vào các trường biểu mẫu
form_textfield = driver.find_element[By.NAME, 'username'] form_textfield.send_keys["admin"]
Điều này cũng có thể được sử dụng để thiết lập đầu vào tập tin
element = element.find_elements[By.CLASS_NAME, 'foo']0
text_length = target_element.get_property["text_length"]7
Trả về một gốc bóng tối của phần tử nếu có một hoặc một lỗi. Chỉ hoạt động từ Chromium 96 trở đi. Các phiên bản trước của trình duyệt dựa trên Chromium sẽ đưa ra một ngoại lệ xác nhận