我在 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 。去那里了解更多信息
这是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 。去那里了解更多信息