поймать ящик электронной почты в окне входа с селеном (python) - PullRequest
0 голосов
/ 18 октября 2018

URL: https://www.omgeo.com/login Я хочу получить ящик для электронной почты в этом случае.

Я пытался

tem = driver.find_element_by_id('user')
tem = driver.find_element_by_name('user')
tem = driver.find_element_by_class_name('ie-background background')
tem = driver.find_element_by_xpath('//input[@id="user"]')

Selenium сообщает об ошибке такого же типа: невозможно найти элемент.

Если я нажму на проверку, я найду HTML-код

<input type="text" name="user" id="user" size="30" class="ie-background background" tabindex="1" autocomplete="off"> 

Однако, когда я нажму на просмотр исходного кода, который просто содержит этот фрагмент HTML-кода, он выдаст мне другой HTML-код. Наверное, поэтому селен не может захватить ящик электронной почты.

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Вам нужно переключиться на iframe, который содержит форму.Вот код

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import  By


browser = webdriver.Chrome("C:\Py\pythonv4\chrome\chromedriver_2.42.exe")
browser.get('https://www.omgeo.com/login')
browser.switch_to.frame(0)
WebDriverWait(browser, 20).until(
  EC.presence_of_element_located((By.ID, "user"))
) 
browser.find_element_by_id('user').send_keys("test")
0 голосов
/ 18 октября 2018

При проверке элемента я вижу элемент, расположенный внутри iframe.Для случая с фреймами, как говорили другие, нам нужно переключиться на фрейм, прежде чем взаимодействовать с любым элементом внутри него.

Также нам нужно переключиться обратно на основной контент, чтобы продолжить вводящий элемент в основной html.

В основномзагрузка содержимого в iframe займет некоторое время.Поэтому нам нужно дождаться загрузки кадра и переключиться на него.

В вашем случае приведенный ниже код работает для меня:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.omgeo.com/login')
wait = WebDriverWait(driver, 60)
wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'iframe[src$=login]')))
driver.find_element_by_id('user').send_keys("emailid")

После выполнения операции входа в систему взаимодействовать с основным html dom,Вам нужно переключиться обратно с помощью следующих строк:

browser.switchTo().defaultContent();

Примечание: В приведенном выше примере я использовал менеджер webdriver для автоматической установки двоичного файла драйвера Chrome.Подробнее см. в этом ответе

0 голосов
/ 18 октября 2018

Мне кажется, что форма входа не отображается при загрузке страницы, она появляется позже.Вы пытались дождаться отображения элемента «email»?

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

tem = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "email"))
    ) 

Приведенный выше код будет ожидать размещения элемента на странице или 10 секунд (что произойдет раньше).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...