[英]Finding page element using selenium(Python)
我試圖在https://www.textnow.com/login上找到登錄頁面的用戶名路徑。 我嘗試通過 x_path、ID、Name、class 找到它,但我的機器人找不到它。 有沒有人有我可以嘗試的任何可能的解決方案?
源代碼:
"SUDO FUNCTION: OPEN A NEW TAB FOR TEXT NOW AND LOG IN"
driver.implicitly_wait(3)
driver.execute_script("window.open('http://www.textnow.com/login','new window')")
textNowEmail = driver.find_element_by_id('txt-username')# still have not found username textfield
textNowEmail.send_keys(textNowUser)
#Set password code
textNowPass = driver.find_element_by_id('txt-password')
textNowPass.send_keys('fill')
這是我收到的消息:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="txt-username"]"}
(Session info: chrome=78.0.3904.108)
您正在打開一個新窗口。 你要改用它嗎? 為了確保您在正確的窗口中,您可以使用“driver.get_source()”方法獲取頁面源,然后評估 DOM。
考慮到有 2 個窗口句柄,您可以使用以下命令切換到新打開的窗口:
required_window = driver.window_handles[1]
driver.switch_to_window(required_window)
還可以嘗試使用“WebDriverWait”和“expected_conditions”通過導入以下內容等待所需元素出現:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
然后使用預期條件查找元素:
WebDriverWait(driver,5).until(
EC.presence_of_element_located((By.ID, "txt-username")))
當您使用execute_script
打開新窗口時,您的窗口句柄仍在原始窗口中。 您需要切換窗口。
您可以使用driver.window_hanldes
檢查所有可用的窗口
對於您的情況,只需使用
driver.switch_to.window(driver.window_handles[1])
打開新窗口后
然后繼續你的其余代碼
要將字符序列發送到網站https://www.textnow.com/login 中的電子郵件或用戶名和密碼字段,您必須為element_to_be_clickable()
引入WebDriverWait ,您可以使用以下任一定位器策略:
使用CSS_SELECTOR
:
options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options, executable_path=r'C:\\Utility\\BrowserDrivers\\chromedriver.exe') driver.get("https://www.textnow.com/login") WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.uikit-text-field__input#txt-username"))).send_keys("Xavier-Uriel-Espinal") driver.find_element_by_css_selector("input.uikit-text-field__input#txt-password").send_keys("Xavier-Uriel-Espinal")
使用XPATH
:
options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options, executable_path=r'C:\\Utility\\BrowserDrivers\\chromedriver.exe') driver.get("https://www.textnow.com/login") WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='uikit-text-field__input' and @id='txt-username']"))).send_keys("Xavier-Uriel-Espinal") driver.find_element_by_xpath("//input[@class='uikit-text-field__input' and @id='txt-password']").send_keys("Xavier-Uriel-Espinal")
注意:您必須添加以下導入:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
瀏覽器快照:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.