在 python 3.9 和 selenium 4.0.0 上
所以我目前正在嘗試訪問一個網站并檢查那里是否有“請輸入您的用戶名”之類的文本,如果該文本不存在,它將打開一個不同的選項卡并轉到另一個網站。
這是我當前的代碼:
driver = webdriver.Chrome(ChromeDriverManager().install()) # opens a new chrome window
driver.maximize_window() # maximizes the window
driver.get('website.com')
if driver.find_element(By.XPATH, '//*[@id="outside"]/div[4]/div/p [contains(text(), "Please enter your Username and Password to continue.")]').click() is True:
loginBox = driver.find_element(By.XPATH, '//input[@id="username"]')
loginBox.send_keys("username")
password = driver.find_element(By.XPATH, '//input[@type = "password"]')
password.send_keys("password")
else:
pass
driver.execute_script("window.open('about:blank','secondtab');")
driver.switch_to.window("secondtab")
driver.get("secondwebsite.com")
...
它目前只是打開網站并坐在那里,而不檢查我想要的任何條件。
uj5u.com熱心網友回復:
.click 回傳型別是無效的,因此將其回傳為 true 沒有任何意義。
此外,如果您使用find_elements( Plural ),您將有一個list.
請使用以下代碼:
try:
if len(driver.find_elements(By.XPATH, "//*[@id='outside']/div[4]/div/p [contains(text(), 'Please enter your Username and Password to continue.')]")) > 0:
print("This means that the above xpath is valid and have a node in HTMLDOM")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='outside']/div[4]/div/p [contains(text(), 'Please enter your Username and Password to continue.')]"))).click()
loginBox = driver.find_element(By.XPATH, '//input[@id="username"]')
loginBox.send_keys("username")
password = driver.find_element(By.XPATH, '//input[@type = "password"]')
password.send_keys("password")
else:
print("Please check this xpath, //*[@id='outside']/div[4]/div/p [contains(text(), 'Please enter your Username and Password to continue.')]")
pass
except:
pass
driver.execute_script("window.open('about:blank','secondtab');")
driver.switch_to.window("secondtab")
driver.get("secondwebsite.com")
我已經誘導Explicit waits (WebDriverWait),請使用以下進口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
請檢查dev tools(谷歌瀏覽器)我們是否有唯一的條目HTML DOM。
您應該檢查的 xpath :
//*[@id='outside']/div[4]/div/p [contains(text(), 'Please enter your Username and Password to continue.')]
檢查步驟:
Press F12 in Chrome- >去element節- >做一個CTRL F- >再貼上xpath看看,如果你需要的element是越來越強調與1/1匹配的節點。
uj5u.com熱心網友回復:
您正在Please enter your Username and Password to continue.使用driver.get('website.com').打開該頁面后立即查找包含文本的元素。
這可能會導致您在尚未完全呈現的情況下檢查此元素內容。
還,
driver.find_element(By.XPATH, '//*[@id="outside"]/div[4]/div/p [contains(text(), "Please enter your Username and Password to continue.")]').click()
不回傳布林值,它什么都不回傳。
所以它永遠不會True
這就是為什么你立即傳遞到else你什么都不做的地方,只是pass
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362317.html
上一篇:PythonSelenium查找給定符號和日期的圖表并截圖
下一篇:找不到By.xpath定位的元素
