Hướng dẫn python selenium wait for login - python selen chờ đăng nhập

Tôi đang cố gắng chạy một tập lệnh trong selenium/python yêu cầu đăng nhập ở các điểm khác nhau trước khi phần còn lại của tập lệnh có thể chạy. Có cách nào để tôi nói với tập lệnh tạm dừng và đợi ở màn hình đăng nhập để người dùng nhập thủ công tên người dùng và mật khẩu (có thể là thứ gì đó chờ đợi tiêu đề trang thay đổi trước khi tiếp tục tập lệnh).

Đây là mã của tôi cho đến nay:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import unittest, time, re, getpass

driver = webdriver.Firefox()
driver.get("https://www.facebook.com/")

someVariable = getpass.getpass("Press Enter after You are done logging in")

driver.find_element_by_xpath('//*[@id="profile_pic_welcome_688052538"]').click()

Đã hỏi ngày 4 tháng 6 năm 2013 lúc 20:58Jun 4, 2013 at 20:58

Hướng dẫn python selenium wait for login - python selen chờ đăng nhập

JStewjStewJStew

4173 Huy hiệu vàng7 Huy hiệu bạc19 Huy hiệu đồng3 gold badges7 silver badges19 bronze badges

Sử dụng webdriverwait. Ví dụ: điều này thực hiện tìm kiếm Google và sau đó chờ một yếu tố nhất định có mặt trước khi in kết quả:

import contextlib
import selenium.webdriver as webdriver
import selenium.webdriver.support.ui as ui
with contextlib.closing(webdriver.Firefox()) as driver:
    driver.get('http://www.google.com')
    wait = ui.WebDriverWait(driver, 10) # timeout after 10 seconds
    inputElement = driver.find_element_by_name('q')
    inputElement.send_keys('python')
    inputElement.submit()
    results = wait.until(lambda driver: driver.find_elements_by_class_name('g'))
    for result in results:
        print(result.text)
        print('-'*80)

wait.until sẽ trả về kết quả của hàm Lambda hoặc selenium.common.exceptions.TimeoutException nếu hàm Lambda tiếp tục trả về giá trị Fisey sau 10 giây.

Bạn có thể tìm thấy thêm một chút thông tin về WebDriverWait trong cuốn sách Selenium.

Đã trả lời ngày 4 tháng 6 năm 2013 lúc 21:11Jun 4, 2013 at 21:11

UnutbuUnutbuunutbu

803K173 Huy hiệu vàng1725 Huy hiệu bạc1626 Huy hiệu đồng173 gold badges1725 silver badges1626 bronze badges

6

from selenium import webdriver
import getpass # < -- IMPORT THIS

def loginUser():
    # Open your browser, and point it to the login page
    someVariable = getpass.getpass("Press Enter after You are done logging in") #< THIS IS THE SECOND PART
    #Here is where you put the rest of the code you want to execute

Sau đó, bất cứ khi nào bạn muốn chạy tập lệnh, bạn nhập

import contextlib
import selenium.webdriver as webdriver
import selenium.webdriver.support.ui as ui
with contextlib.closing(webdriver.Firefox()) as driver:
    driver.get('http://www.google.com')
    wait = ui.WebDriverWait(driver, 10) # timeout after 10 seconds
    inputElement = driver.find_element_by_name('q')
    inputElement.send_keys('python')
    inputElement.submit()
    results = wait.until(lambda driver: driver.find_elements_by_class_name('g'))
    for result in results:
        print(result.text)
        print('-'*80)
0 và nó làm điều của nó

Điều này hoạt động bởi vì

import contextlib
import selenium.webdriver as webdriver
import selenium.webdriver.support.ui as ui
with contextlib.closing(webdriver.Firefox()) as driver:
    driver.get('http://www.google.com')
    wait = ui.WebDriverWait(driver, 10) # timeout after 10 seconds
    inputElement = driver.find_element_by_name('q')
    inputElement.send_keys('python')
    inputElement.submit()
    results = wait.until(lambda driver: driver.find_elements_by_class_name('g'))
    for result in results:
        print(result.text)
        print('-'*80)
1 hoạt động chính xác như
import contextlib
import selenium.webdriver as webdriver
import selenium.webdriver.support.ui as ui
with contextlib.closing(webdriver.Firefox()) as driver:
    driver.get('http://www.google.com')
    wait = ui.WebDriverWait(driver, 10) # timeout after 10 seconds
    inputElement = driver.find_element_by_name('q')
    inputElement.send_keys('python')
    inputElement.submit()
    results = wait.until(lambda driver: driver.find_elements_by_class_name('g'))
    for result in results:
        print(result.text)
        print('-'*80)
2, ngoại trừ nó không hiển thị bất kỳ characthers nào (nó để chấp nhận mật khẩu và ghi chú nó cho mọi người nhìn vào màn hình)

Vì vậy, những gì xảy ra là trang của bạn tải lên. Sau đó, mọi thứ dừng lại, người dùng của bạn đăng nhập thủ công và sau đó quay lại Python CLI và truy cập vào.

Đã trả lời ngày 4 tháng 6 năm 2013 lúc 21:56Jun 4, 2013 at 21:56

TehtrisHtrisTehTris

3.0891 Huy hiệu vàng20 Huy hiệu bạc33 Huy hiệu đồng1 gold badge20 silver badges33 bronze badges

4

Ngày nay, hầu hết các ứng dụng web đang sử dụng các kỹ thuật AJAX. Khi một trang được tải bởi trình duyệt, các phần tử trong trang đó có thể tải ở các khoảng thời gian khác nhau. Điều này làm cho việc định vị các yếu tố khó khăn: nếu một phần tử chưa có trong DOM, hàm định vị sẽ tăng ngoại lệ phần tử. Sử dụng chờ đợi, chúng ta có thể giải quyết vấn đề này. Chờ đợi cung cấp một số sự chậm chạp giữa các hành động được thực hiện - chủ yếu là định vị một phần tử hoặc bất kỳ hoạt động nào khác với phần tử.

Selenium WebDriver cung cấp hai loại chờ đợi - ngầm & rõ ràng. Một sự chờ đợi rõ ràng làm cho WebDriver chờ đợi một điều kiện nhất định xảy ra trước khi tiến hành thực hiện. Một sự chờ đợi ngầm làm cho WebDriver thăm dò DOM trong một khoảng thời gian nhất định khi cố gắng xác định vị trí một phần tử.

Chờ đợi trong Selenium Python là gì?

Chờ đợi ngầm là nói với WebDriver để thăm dò DOM trong một khoảng thời gian nhất định khi cố gắng tìm một yếu tố hoặc phần tử nếu chúng không có sẵn ngay lập tức. Cài đặt mặc định là 0, có nghĩa là bị vô hiệu hóa. Sau khi được đặt, sự chờ đợi ngầm được đặt cho cuộc sống của phiên. Java.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

Ngày nay, hầu hết các ứng dụng web đang sử dụng các kỹ thuật AJAX. Khi một trang được tải bởi trình duyệt, các phần tử trong trang đó có thể tải ở các khoảng thời gian khác nhau. Điều này làm cho việc định vị các yếu tố khó khăn: nếu một phần tử chưa có trong DOM, hàm định vị sẽ tăng ngoại lệ phần tử. Sử dụng chờ đợi, chúng ta có thể giải quyết vấn đề này. Chờ đợi cung cấp một số sự chậm chạp giữa các hành động được thực hiện - chủ yếu là định vị một phần tử hoặc bất kỳ hoạt động nào khác với phần tử.

5.1. Chờ đợi rõ ràng

Chờ đợi rõ ràng là một mã bạn xác định để chờ đợi một điều kiện nhất định xảy ra trước khi tiến hành thêm trong mã. Trường hợp cực đoan của điều này là thời gian.s ngủ (), đặt điều kiện ở một khoảng thời gian chính xác để chờ đợi. Có một số phương thức tiện lợi với điều kiện giúp bạn viết mã sẽ chỉ chờ đợi miễn là yêu cầu. WebDriverWait kết hợp với dự kiến ​​là một cách này có thể được thực hiện.

  • Trong mã trên, Selenium sẽ chờ tối đa 10 giây cho một yếu tố phù hợp với các tiêu chí đã cho được tìm thấy. Nếu không có yếu tố nào được tìm thấy trong thời gian đó, thời gian chờ được ném. Theo mặc định, WebDriverWait gọi điều kiện dự kiến ​​cứ sau 500 mili giây cho đến khi nó trở lại thành công. Dự kiến ​​sẽ trả về true (boolean) trong trường hợp thành công hoặc không vô hiệu nếu nó không xác định được một phần tử.
  • title_contains
  • presence_of_element_located
  • visibility_of_element_located
  • visibility_of
  • presence_of_all_elements_located
  • text_to_be_present_in_element
  • text_to_be_present_in_element_value
  • frame_to_be_available_and_switch_to_it
  • invisibility_of_element_located
  • element_to_be_clickable
  • staleness_of
  • element_to_be_selected
  • element_located_to_be_selected
  • element_selection_state_to_be
  • Điều kiện mong đợi
  • alert_is_present

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))

Có một số điều kiện phổ biến thường được sử dụng khi tự động hóa các trình duyệt web. Được liệt kê dưới đây là tên của mỗi. Selenium Python Binding cung cấp một số phương thức tiện lợi để bạn không phải tự mình mã hóa một lớp dự kiến ​​hoặc tạo gói tiện ích của riêng bạn cho chúng.

Tiêu đề_is

Element_located_selection_state_to_be

class element_has_css_class(object):
  """An expectation for checking that an element has a particular css class.

  locator - used to find the element
  returns the WebElement once it has the particular css class
  """
  def __init__(self, locator, css_class):
    self.locator = locator
    self.css_class = css_class

  def __call__(self, driver):
    element = driver.find_element(*self.locator)   # Finding the referenced element
    if self.css_class in element.get_attribute("class"):
        return element
    else:
        return False

# Wait until an element with id='myNewInput' has class 'myCSSClass'
wait = WebDriverWait(driver, 10)
element = wait.until(element_has_css_class((By.ID, 'myNewInput'), "myCSSClass"))

Mô -đun dự kiến_conditions chứa một tập hợp các điều kiện được xác định trước để sử dụng với WebDriverWait.

Điều kiện chờ tùy chỉnh

Bạn cũng có thể tạo các điều kiện chờ tùy chỉnh khi không có phương thức tiện lợi nào trước đó phù hợp với yêu cầu của bạn. Một điều kiện chờ tùy chỉnh có thể được tạo bằng cách sử dụng một lớp với phương thức __call__ trả về sai khi điều kiện không khớp.

Ghi chú

Thư viện bỏ phiếu2

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

Làm thế nào để tôi làm cho Selenium đợi trang tải trong Python?

Có ba cách khác nhau để thực hiện Selenium Chờ trong Python cho trang để tải: Chờ đợi rõ ràng ...
Trình điều khiển - Đây là ví dụ của webdriver bạn đang sử dụng để thực hiện thử nghiệm ứng dụng của mình. ....
Thời gian chờ - Nó đề cập đến số giây trước khi sự chờ đợi này không thành công và ném một ngoại lệ ..

Làm thế nào để bạn trì hoãn trong selen?

Chờ đợi tiềm ẩn chỉ đạo selenium webdriver chờ đợi một thước đo thời gian nhất định trước khi ném một ngoại lệ. Khi thời gian này được đặt, WebDriver sẽ đợi phần tử trước khi ngoại lệ xảy ra. Khi lệnh được đặt đúng vị trí, chờ đợi ẩn giữ đúng vị trí trong toàn bộ thời lượng mà trình duyệt được mở. directs the Selenium WebDriver to wait for a certain measure of time before throwing an exception. Once this time is set, WebDriver will wait for the element before the exception occurs. Once the command is in place, Implicit Wait stays in place for the entire duration for which the browser is open.

WebDriver đang chờ gì trong Selenium Python?

Selenium WebDriver cung cấp hai loại chờ đợi - ngầm & rõ ràng.Một sự chờ đợi rõ ràng làm cho WebDriver chờ đợi một điều kiện nhất định xảy ra trước khi tiến hành thực hiện.Một sự chờ đợi ngầm làm cho WebDriver thăm dò DOM trong một khoảng thời gian nhất định khi cố gắng xác định vị trí một phần tử.An explicit wait makes WebDriver wait for a certain condition to occur before proceeding further with execution. An implicit wait makes WebDriver poll the DOM for a certain amount of time when trying to locate an element.

Chờ đợi trong Selenium Python là gì?

Chờ đợi ngầm là nói với WebDriver để thăm dò DOM trong một khoảng thời gian nhất định khi cố gắng tìm một yếu tố hoặc phần tử nếu chúng không có sẵn ngay lập tức.Cài đặt mặc định là 0, có nghĩa là bị vô hiệu hóa.Sau khi được đặt, sự chờ đợi ngầm được đặt cho cuộc sống của phiên.Java.