[英]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 && .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.