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

问题描述

这是链接https://webmail1.hostinger.com/

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

我认为它们可能位于框架之内,我无法访问页面中的框架。

我还试图插入一个等待期,以防有什么事情要加载,但这并不能解决问题。 这是我代码的相关部分目前的样子:

<!-- Set height to your `<v-list>` and add `overflow-y: scroll` -->
<v-list style="height: 250px; overflow-y: scroll">
  <v-list-item-group color="primary">
    <v-list-item v-for="(n) in 100" :key="n">
      <v-list-item-content>
        <v-list-item-title>Item {{ n }}</v-list-item-title>
      </v-list-item-content>
    </v-list-item>
  </v-list-item-group>
</v-list>

感谢您的帮助

解决方法

“ 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中,我们使用了webdriver等待而不是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个小时后,我终于找到了答案。 上面的答案都没有帮助我,也许是因为我不够清楚。

基本上,我的代码的第一部分打开了一个窗口,插入了密码,电子邮件等,一切正常。 然后,我打开了一个新标签页,并带有>(这里有人声称是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 。去那里了解更多信息