Я не могу найти элемент в Selenium.(Python / Google)

#python #selenium #web-scraping #chrome-web-driver

#python #селен #очистка веб-страниц #chrome-веб-драйвер

Вопрос:

Это ссылка https://webmail1.hostinger.com /

Я хочу найти 2 поля ввода и ввести свой адрес электронной почты и пароль, но я не могу получить к ним доступ. Я могу легко найти их, просмотрев страницу, но я не могу найти их по их xpath, селектору, идентификатору и т.д.

Я подумал, что они могут находиться внутри фрейма, и я безрезультатно использовал фреймы на странице.

Я также попытался вставить период ожидания на случай, если есть что загрузить, но это не решило проблему. Вот как выглядит соответствующий раздел моего кода в настоящее время:

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

Спасибо за вашу помощь

Комментарии:

1. Хотя на вашей странице есть один фрейм, ваши элементы не находятся внутри iframe. Вам просто нужно определить элементы и ввести текст. Попробуйте использовать идентификатор как уникальный и присутствующий для вашего обоих текстовых полей.

Ответ №1:

«execute_script» — это метод javascript, который используется для поиска элемента, который может быть недоступен пользователю, он используется для поиска элементов, а не для открытия веб-сайта. Я также нашел идентификатор полей ввода.

вместо этого используйте 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')
  

Ответ №2:

Если вы хотите перейти по URL-адресу, получить идентификатор и отправить на Python, вам следует сделать что-то вроде этого. Ваши теги не были в iframe, и мы используем webdriver waits вместо 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()
  

Ответ №3:

поиск элемента по идентификатору должен сработать. Если вам нужно дождаться загрузки страницы, вы можете использовать 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) `
  

Ответ №4:

ВАЖНО: проверьте этот ответ, если вы не можете открыть элемент после открытия новой вкладки. Это была моя проблема*

72 попытки, и примерно через 5 часов я, наконец, нашел ответ. Ни один из ответов выше не помог мне, возможно, потому, что я был недостаточно ясен.

В принципе, первая часть моего кода открыла окно, ввела пароль, адрес электронной почты и т.д., И все прошло нормально. Затем я открыл новую вкладку с> (которая, как кто-то здесь утверждал, была Javascript. Это может быть, но это определенно команда и в python.)

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

Я попытался найти элементы из этой новой вкладки, которая была открыта, но вам нужно сообщить webdriver переключиться на новую вкладку. Я думал, что достаточно только открыть его, чтобы webdriver автоматически переключился на него.
В принципе, я искал элементы tab 2 в HTML tab 1, и именно поэтому я их не нашел.
Вот мой код сейчас:

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

Это работает как шарм.
Это ссылка , которую я нашел по этому поводу. Перейдите туда для получения дополнительной информации