使用selenium(Python)查找页面元素

2024-10-03 21:32:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试图找到https://www.textnow.com/login上登录页的用户名路径。我试着通过x\u路径,ID,名称,类来找到它,但是我的机器人就是找不到它。有没有人有任何可能的解决方案,我可以尝试?你知道吗

源代码:

"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)

Tags: 路径txtcomsendidbywwwdriver
3条回答

使用execute_script打开新窗口时,窗口句柄仍在原始窗口中。你得换个窗户。你知道吗

您可以使用driver.window_hanldes检查所有可用的窗口

为了你的案子,就用

driver.switch_to.window(driver.window_handles[1])

打开新窗口后

然后继续剩下的代码

要将字符序列发送到网站https://www.textnow.com/login中的电子邮件或用户名密码字段,必须为element_to_be_clickable()导入WebDriverWait,并且可以使用以下Locator Strategies

  • 使用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
    
  • 浏览器快照:

textnow

你正在打开一扇新窗户。你要换吗?为了确保您在正确的窗口中,您可以使用driver.get\u源()”方法,然后计算DOM。你知道吗

考虑到有两个窗口句柄,您可以使用以下命令切换到新打开的窗口:

required_window = driver.window_handles[1]
driver.switch_to_window(required_window)

还可以尝试使用“WebDriverWait”和“expected\u 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")))

相关问题 更多 >