Hết thời gian chờ Selenium của Python
Gọi phương thức được cung cấp cùng với trình điều khiển làm đối số cho đến khi giá trị trả về không ước tính thành Show
kết quả của lần gọi phương thức cuối cùng hoặc phương thức trình điều khiển set_page_load_timeout – Selenium Python Cải thiện bài viết Lưu bài viết Thích bài viết
Cải thiện bài viết Lưu bài viết Mô-đun Python của Selenium được xây dựng để thực hiện kiểm tra tự động với Python. Các ràng buộc Selenium Python cung cấp một API đơn giản để viết các bài kiểm tra chức năng/chấp nhận bằng cách sử dụng Selenium WebDriver. Để mở một trang web bằng Selenium Python, hãy kiểm tra – Điều hướng liên kết bằng phương thức get – Selenium Python. Chỉ có thể đi đến những nơi không hữu ích lắm. Điều chúng tôi thực sự muốn làm là tương tác với các trang hoặc cụ thể hơn là các phần tử HTML trong một trang. Có nhiều chiến lược để tìm một phần tử bằng Selenium, hãy thanh toán – Chiến lược định vị. Selenium WebDriver cung cấp nhiều phương pháp hữu ích khác nhau để kiểm soát phiên, hay nói cách khác, trình duyệt. Ví dụ: thêm cookie, nhấn nút quay lại, điều hướng giữa các tab, v.v. driver.set_page_load_timeout(time_To_wait) Thí dụ - driver.get("https://www.geeksforgeeks.org/") driver.set_page_load_timeout(30)
Làm cách nào để sử dụng phương thức trình điều khiển set_page_load_timeout trong Selenium Python?Để chứng minh, phương thức set_page_load_timeout của WebDriver trong Selenium Python. Hãy truy cập https. //www. chuyên viên máy tính. org/ và hoạt động trên đối tượng trình điều khiển Python3
driver.get("https://www.geeksforgeeks.org/") driver.set_page_load_timeout(30)0
driver.get("https://www.geeksforgeeks.org/") driver.set_page_load_timeout(30)1 driver.get("https://www.geeksforgeeks.org/") driver.set_page_load_timeout(30)2 driver.get("https://www.geeksforgeeks.org/") driver.set_page_load_timeout(30)3 driver.get("https://www.geeksforgeeks.org/") driver.set_page_load_timeout(30)4
driver.get("https://www.geeksforgeeks.org/") driver.set_page_load_timeout(30)5 driver.get("https://www.geeksforgeeks.org/") driver.set_page_load_timeout(30)6 driver.get("https://www.geeksforgeeks.org/") driver.set_page_load_timeout(30)7 driver.get("https://www.geeksforgeeks.org/") driver.set_page_load_timeout(30)4 Đầu ra –
Ghi chú cá nhân của tôi arrow_drop_up Tiết kiệm Vui lòng Đăng nhập để nhận xét.Đây là phần 3 trong quá trình khám phá selen của tôi khi cố gắng tìm nạp các câu chuyện từ NY Times ((với tư cách là người đăng ký) Ở cuối Phần II, Selenium đang chạy trên máy chủ được cài đặt số lượng thư viện X và GTK tối thiểu Nhưng bây giờ nó có thể chạy tự do, không còn vấn đề gì nữa. có tất cả các cách mà điều này có thể thất bại và tập lệnh của bạn cần xử lý những lỗi đó bằng cách nào đó Trước khi đi sâu vào, tôi nên đề cập rằng đối với mục tiêu ban đầu của tôi, lấy các câu chuyện từ NY Times với tư cách là người đăng ký, hóa ra tôi không cần selen. Do việc xử lý các lỗi Selenium trở nên quá dễ vỡ (như tôi sẽ mô tả trong bài viết này), nên tôi hiện đang sử dụng các yêu cầu kết hợp với Python CookieJar. Tôi sẽ viết về điều đó trong một bài báo trong tương lai. Trong khi đó Xử lý lỗi và thời gian chờThời gian chờ là một vấn đề cụ thể với Selenium, vì dường như không có cách nào đáng tin cậy để thay đổi chúng để tập lệnh Selenium không bị treo trong thời gian dài một cách lố bịch Và quá trình tìm nạp selen đặc biệt dễ bị hết thời gian, so với các lần tìm nạp đơn giản hơn như Một điều được cho là hữu ích là tải trang "háo hức" options.page_load_strategy = "eager"Theo tài liệu, "eager" yêu cầu trình điều khiển web "đợi cho đến khi tài liệu HTML ban đầu được tải và phân tích cú pháp hoàn chỉnh, đồng thời loại bỏ việc tải biểu định kiểu, hình ảnh và khung con. ". Bạn cũng có thể đặt thành "không", có nghĩa là "chờ cho đến khi trang ban đầu được tải xuống. " Đó là một suy nghĩ hay, nhưng tôi không tin rằng họ tạo ra bất kỳ sự khác biệt nào; . Khi bạn đang tìm nạp hàng chục trang, vài phút trên mỗi trang sẽ kéo dài thành một khoảng thời gian dài Một cách tiếp cận khác là đặt thời gian chờ khác nhau trên trình điều khiển web. Đây là ba cài đặt tôi đã thử webdriver.set_page_load_timeout(25) webdriver.implicitly_wait(20); webdriver.set_script_timeout(20); Một lần nữa, ngay cả khi hết thời gian chờ này, tôi vẫn thấy các trang bị treo trong nhiều phút Tồi tệ hơn, nếu bạn làm gián đoạn Cuối cùng tôi đã thử tất cả những cách trên, với hy vọng rằng mỗi người có thể giúp ích cho một số trang; Nhưng ngay cả việc theo dõi các lỗi cũng khó khăn vì có rất nhiều ngoại lệ khác nhau được xác định ở những nơi khác nhau. Và chúng có thể xảy ra trong webdriver.set_page_load_timeout(25) webdriver.implicitly_wait(20); webdriver.set_script_timeout(20);0. Đây là mã để nắm bắt các ngoại lệ mà tôi đã thấy trong một tuần thử nghiệm from urllib3.exceptions import MaxRetryError, NewConnectionError from selenium.common.exceptions import TimeoutException num_timeouts = 0 MAX_TIMEOUTS = 3 def fetch_article(url): global num_timeouts if num_timeouts >= MAX_TIMEOUTS: return timeout_boilerplate(url, "Gave up after earlier timeout") try: webdriver.get(url) except TimeoutException as e: num_timeouts += 1 print("EEK! TimeoutException", e, file=sys.stderr) return timeout_boilerplate(url, "TimeoutException") except (ConnectionRefusedError, MaxRetryError, NewConnectionError) as e: # MaxRetryError and NewConnectionError come from urllib3.exceptions # ConnectionRefusedError is a Python builtin. num_timeouts += 1 print("EEK! Connection error", e, file=sys.stderr) traceback.print_exc(file=sys.stderr) except Exception as e: num_timeouts += 1 print("EEK! Unexpected exception in webdriver.get: " + str(e)) try: fullhtml = webdriver.page_source except Exception as e: num_timeouts += 1 print("EEK! Fetched page but couldn't get html: " + str(e)) # Got it, whew! Proceed with processing fullhtml. Cùng với đó, cộng với việc cố gắng đặt thời gian chờ ngắn hơn mà tôi đã đề cập trước đó, phần lớn thời gian Selenium tự động của tôi đã tìm nạp ít nhất hầu hết các câu chuyện. Nhưng còn một vấn đề Giết FirefoxTại một thời điểm, sau khi thực hiện một số thay đổi đối với thời gian chờ, tôi đã cố gắng ssh đến máy chủ để xác minh tập lệnh đã chạy chưa. Và tôi thấy máy chủ không cho phép kết nối ssh, mặc dù nó đã phản hồi ping Đăng nhập vào giao diện điều khiển của máy cho biết nó đã hết bộ nhớ. Hóa ra Firefox vẫn tiếp tục chạy sau khi thoát Selenium; Vì vậy, tôi đã thêm một số mã để tiêu diệt firefox ở cuối công việc định kỳ (tập lệnh shell) chạy tập lệnh Selenium Python echo "Killing firefox" pkill -e firefox sleep 10 echo "Killing -9 firefox, just in case" pkill -e --signal 9 firefox Tôi chắc chắn rằng nếu tôi tiếp tục sử dụng tập lệnh selen hàng ngày, tôi sẽ phát hiện ra nhiều vấn đề như thế hơn. Công việc tự động hóa firefox-qua-selenium này mang tính nghệ thuật hơn là khoa học và đó là một thế giới đau đớn so với việc chỉ tìm nạp các câu chuyện bằng các yêu cầu python như tôi có thể làm với mọi trang web khác. May mắn cho tôi, như tôi đã đề cập ở phần đầu, trong trường hợp cụ thể của NY Times, hóa ra tôi không thực sự cần Selenium, tôi chỉ cần cookie từ hồ sơ Firefox của mình Tuy nhiên, nếu không có gì khác, nó đã thúc đẩy tôi học Selenium. Tôi có thể sử dụng kiến thức đó để viết bài kiểm tra tự động cho một số ứng dụng web JavaScript mà tôi chưa thể kiểm tra cho đến bây giờ Và vì điều này ban đầu được lấy cảm hứng từ một câu hỏi từ cuộc họp LUG địa phương, nên tôi sẽ đưa ra một hướng dẫn không chính thức về selen tại cuộc họp NMGLUG tối nay (11/11/2021), 5. Múi giờ 30-7. Đó là trên jitsi, vì vậy hãy thoải mái xuất hiện ngay cả khi bạn không phải là người địa phương, nếu bạn muốn nói chuyện về selen hoặc cạo hoặc bất cứ thứ gì khác Làm cách nào để đặt thời gian chờ trong Selenium Python?Chúng tôi có thể sử dụng khái niệm chờ ngầm định trong quá trình đồng bộ hóa để xác định thời gian chờ mặc định . Đây là thời gian chờ toàn cầu và được áp dụng cho mọi thành phần trong trang. Phương thức implicitly_wait được sử dụng để xác định chờ đợi ngầm định. Thời gian chờ tính bằng giây được truyền dưới dạng tham số cho phương thức.
Làm cách nào để sửa lỗi ngoại lệ hết thời gian chờ trong Selenium Python?Giải pháp . Bạn có thể tăng thời gian chờ theo cách thủ công bằng cách nhấn và dùng thử. Nếu sự cố vẫn tiếp diễn trong một khoảng thời gian dài hơn, có thể có một số vấn đề khác và bạn nên tiếp tục giải pháp tiếp theo Bạn có thể thêm thời gian chờ một cách rõ ràng bằng cách sử dụng JavaScript Executor Python xử lý thời gian chờ của phiên trong Selenium như thế nào?1 câu trả lời . Cài đặt WebDriver mặc định cho thời gian chờ không bao giờ. WebDriver sẽ ngồi đó mãi mãi để chờ tải trang Thời gian chờ sau đây có sẵn Bạn có thể điều chỉnh thời gian chờ bằng cách đặt trình điều khiển. quản lý(). thời gian chờ(). pageLoadTimeout() Làm cách nào để hết thời gian chờ trong Selenium?setScriptTimeout là phương thức đặt thời gian cho webdriver. Điều này thường được áp dụng cho một bài kiểm tra không đồng bộ để hoàn thành một ngoại lệ trước khi ném. Giá trị mặc định của thời gian chờ là 0. . setScriptTimeout thời gian chờ tải trang chờ đợi ngầm |