#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")
Это работает как шарм.
Это ссылка , которую я нашел по этому поводу. Перейдите туда для получения дополнительной информации