簡體   English   中英

使用硒(Python)查找頁面元素

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

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