我正在嘗試使用 selenium 撰寫一個 python 腳本來進入一個網站(Salesforce.com)并更改各種輸入欄位并截取螢屏截圖。但是,當涉及到我組織的 SSO 界面時,我遇到了問題。我的 URL 首先將我重定向到一個登錄頁面(它要求提供 org 電子郵件),然后是一個需要登錄憑據的頁面,然后我才能訪問我正在尋找的儀表板。
出于本次討論的目的,我將呼叫登錄頁面,頁面#1,和登錄重定向頁面,頁面#2。
我的 selenium 腳本能夠單擊第 1 頁中的元素,但無法在第 2 頁上執行任何操作。我已經嘗試過顯式和隱式等待。但我認為這個問題與重定向有關,它發生在同一個視窗/選項卡中,而不是頁面加載的“等待”期。
這是我的代碼:
url = someurl.com
class MyTest(object):
def __init__(self):
self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
def login_process(self):
self.driver.get(url)
element = self.driver.find_element(By.ID, 'idp-discovery-username')
element.clear()
element.send_keys("[email protected]")
self.driver.find_element(By.ID, 'idp-discovery-submit').submit()
self.driver.implicitly_wait(10)
# login_button = WebDriverWait(self.driver, 20).until(
# EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[id$='IFrame_htmIFrame']"))
# )
def query(self):
self.driver.find_element(By.XPATH, '/html/body/div/div[2]/div[2]/article/form/input[6]')
test = MyTest()
test.login_process()
test.query()
我還將鏈接兩個頁面的檢查元素以幫助找到解決方案。
提前致謝。
第 1 頁,已檢查

第 2 頁,已檢查

在第二張圖片中,綠色框是我要訪問的內容:
self.driver.find_element(By.XPATH, '/html/body/div/div[2]/div[2]/article/form/input[6]')
uj5u.com熱心網友回復:
嘗試添加self.driver.implicitly_wait(10)到__init__方法的末尾。
或者在查詢方法中添加顯式等待:
def query(self):
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'login-button'))).click()
uj5u.com熱心網友回復:
有問題的代碼:
self.driver.implicitly_wait(10)
# login_button = WebDriverWait(self.driver, 20).until(
# EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[id$='IFrame_htmIFrame']"))
# )
顯式等待(類似于被注釋掉的)似乎在這里作業得更好。
我變了
login_button = WebDriverWait(self.driver, 20).until(
EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[id$='IFrame_htmIFrame']")))
至
login_button = WebDriverWait(self.driver, 20).until(
EC.element_to_be_clickable((By.ID, 'login-button')))
login_button.click()
它已經奏效了。謝謝大家,希望這對其他人有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/526063.html
標籤:Python硒
上一篇:如何在seleniumpython中的相對css選擇器中使用父選擇器
下一篇:如何安裝lxml?
