问题描述
这是链接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 。去那里了解更多信息