簡體   English   中英

Selenium 無法按名稱或 id 找到元素(Python)

[英]Selenium cannot find element by name or id (Python)

我正在嘗試使用 selenium 自動登錄網站,但出現“沒有此類元素消息”錯誤。 這是我的代碼,其中包含指向該網站的鏈接:

from selenium import webdriver
import time
import datetime

driver = webdriver.Chrome("C:\\Users\\Family\\Downloads\\chromedriver_win32\\chromedriver.exe")
driver.get("https://login.microsoftonline.com/c4d72b4d-8155-4a90-9155-7705148c41ca/saml2?SAMLRequest=jdE9a8MwEAbgvdD%2fYLRbkh3ZVoQdCO0SSJek7dClnJVzYrClVCeX%2fvw6DaEdu90HLzzc1espntwOPyakmGweG0YwDuHav3eqqFSHOZRQKZAZdJDpDjToKisXiCx5xUC9dw3LuWTJhmjCjaMILs4jmWepVKnMnrPCyNIscq601pVUbyxZE2GIc%2fbBO5pGDHsMn73Fl922YacYz2SEiAdqOQ4IwfXu6F2E0HtuQRzyQQxnAbNeDP7YO3Fxby8Vn3cs%2bRoHRw2bgjMeqCfjYEQy0Zr9%2bmlrZq45Bx%2b99QNb3d8lSf2DD%2f8Jwo3OVjdokdlSVrZKUS10quTSphrLIi00drrVebksWh7RzYch3ob%2beIp0Bovc%2bvGXXosrYgbV4u9nVt8%3d&RelayState=%2fd2l%2fhome&sso_reload=true")

login_button = driver.find_element_by_id("i0116")
login_button.send_keys("sajjad.jessa@student.tdsb.on.ca")

這是我試圖用我的代碼訪問的元素:

 <input type="email" name="loginfmt" id="i0116" maxlength="113" lang="en" class="form-control ltr_override input ext-input text-box ext-text-box" aria-required="true" data-bind=" externalCss: { 'input': true, 'text-box': true, 'has-error': usernameTextbox.error }, ariaLabel: tenantBranding.UserIdLabel || str['CT_PWD_STR_Username_AriaLabel'], ariaDescribedBy: 'loginHeader' + (pageDescription &amp;&amp; .svr?fHideLoginDesc: ' loginDescription', ''): textInput. usernameTextbox,value: hasFocusEx. usernameTextbox,focused: placeholder, $placeholderText" aria-label="Enter your TDSB email address here, then click Next" aria-describedby="loginHeader" placeholder="Enter your TDSB email address here, then click Next">

從其他答案我了解到您必須使用 driver.find_element_by_css_selector() 和 driver.switch_to.frame(),但是如果您查看網站的完整超文本,到 go 的第一幀是一個“div”標簽,沒有任何屬性。 然而,它是兩個“腳本”標簽旁邊的唯一“div”標簽。 我需要將 go 的正確代碼放入框架中,或者使用其他方法自動登錄。

現在大多數大型網站都使用動態布局。 您應該使用 static css 選擇器查找父母,然后執行以下操作:

.parent_css_selector > div:nth-child(1) > div:nth-child(3) > img > input

標記 '>' 應該只查找直接子代,標記 ':nth-child' 斷言父代中的子代號。

例子:

<div class="parent_css_selector">
    <div id="random_id_12312313">
        <div id="unneccesary_123123"></div>
        <div id="random_id_341234">
            <form id="random_id_345545">
                <span></span>
                <span></span>
                <span></span>
                <span></span>
                <span>
                    <input id="neccesary_13843942"></input>
                </span>
            </form>
        </div>
    </div>
</div>

您可以使用此選擇器訪問輸入:

.parent_css_selector > div > div:nth-child(2) > form > span:nth-child(5) > input

似乎是同步問題。 誘導WebDriverWait()並等待element_to_be_clickable()

login_button =WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.ID,"i0116")))
login_button.send_keys("sajjad.jessa@student.tdsb.on.ca")

您需要導入以下庫。

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

login_button =WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.NAME,"loginfmt")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM