我在 Selenium 中找不到元素。(Python/Google)

I can't find an element in Selenium.(Python/Google)

这是linkhttps://webmail1.hostinger.com/

我想找到2个输入框并输入我的电子邮件和密码,但我无法访问它们。我可以通过检查页面轻松找到它们,但我无法通过它们的 xpath、选择器、id 等找到它们。

我认为它们可能在框架内,但我访问了页面内的框架但无济于事。

我也试过插入一个等待时间以防有东西要加载,但这并没有解决问题。 这是我的代码的相关部分目前的情况:

driver.execute_script("window.open('https://webmail1.hostinger.com/');)
sleep(10)

iframes = driver.find_elements_by_tag_name("iframe")
driver.switch_to.frame(iframes[0])

element = WebDriverWait(driver, 30).until(
       EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/div[1]/form/table/tbody/tr[1]/td[2]/input"))
    )

element.send_keys("test")

感谢您的帮助

"execute_script" 是一种javascript 方法,用于查找用户可能无法访问的元素,用于查找元素而不打开网站。我也找到了输入框的id。

改用driver.get(URL)

from selenium import webdriver

driver = webdriver.Chrome("location of webdriver")
URL ='https://webmail1.hostinger.com/'

driver.get(URL)

driver.find_element_by_id('rcmloginuser').send_keys('your username')
driver.find_element_by_id('rcmloginpwd').send_keys('your password')

如果您想转到 URL 并获取 ID 并在 python 中提交,您应该这样做。您的标签不在 iframe 中,我们使用网络驱动程序等待而不是 time.sleep()

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

driver = webdriver.Chrome("location of webdriver")
URL ='https://webmail1.hostinger.com/'

driver.get(URL)

WebDriverWait(driver, 30).until(
 EC.presence_of_element_located(By.ID('rcmloginuser'))).send_keys('your username')

WebDriverWait(driver, 30).until(
 EC.presence_of_element_located(By.ID('rcmloginpwd'))).send_keys('your pass')

WebDriverWait(driver, 30).until(
 EC.presence_of_element_located(By.CLASS_NAME('button mainaction submit'))).click()

按 id 查找元素应该可以。如果需要等待页面加载,可以使用EC.presence_of_element_located。不要设置硬编码等待时间。

   ` try:
        element_present = EC.presence_of_element_located((By.ID, 'rcmloginuser'))
        WebDriverWait(driver, timeout).until(element_present)
        user_name = driver.find_element_by_id('rcmloginuser')
        pass_word = driver.find_element_by_id('rcmloginpwd')
        user_name.send_keys(user)
        pass_word.send_keys(password)
        submit_1 = driver.find_element_by_id('rcmloginsubmit h_webmail-login_page-login_button')
        submit_1.click()
    except TimeoutException:
        sys.exit(1) `

重要提示:如果您在打开新选项卡后无法打开元素,请检查此答案。这是我的问题*

72 次尝试,大约 5 小时后我终于找到了答案。 None 上面的答案对我有帮助,可能是因为我不够清楚。

基本上,我的代码的第一部分打开了 window,插入了密码、电子邮件等,一切正常。 然后,我用>(这里有人声称是 Javascript。它可能是,但它绝对是 python 中的一个命令。)

driver.execute_script("window.open('https://webmail1.hostinger.com/');)

我尝试从这个已打开的新选项卡中查找元素,但您需要告诉 webdriver 切换到新选项卡。我认为只打开它就足以让 webdriver 自动切换到它。 基本上,我在选项卡 1 的 html 中搜索选项卡 2 的元素,这就是我没有找到它们的原因。 这是我的代码:

#opens new tab
driver.execute_script("window.open('https://webmail1.hostinger.com/');")
#switches to the second tab 
driver.switch_to.window(driver.window_handles[1])
driver.get(tab_url)

email= driver.find_element_by_name('_user')
email.send_keys("my_email")

password = driver.find_element_by_id("rcmloginpwd")
password.send_keys("my_password")

它就像一个魅力。 这是我发现的 link 。去那里了解更多信息