2016-06-02 4 views
0

Я просто хочу написать простой код входа для одного веб-сайта. Однако, я думаю, что страница входа в систему была написана в JS. Очень сложно найти элементы с селеном. Веб-страница, которую я буду играть это: «https://www.nike.com/snkrs/login?returnUrl=%2F»не может найти элемент внутри веб-страницы, используя selenium python

Это как страница выглядит и как инспектировать элемент страницы выглядит следующим образом:

Я пытался найти элемент по следующему коду:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
import time 
driver = webdriver.Firefox() 
driver.get("https://www.nike.com/snkrs/login?returnUrl=%2Fthread%2Fe9680e08e7e3cd76b8832684037a58a369cad5ed") 
time.sleep(5) 
driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) 
elem =driver.find_element_by_xpath("//*[@id='ce3feab5-6156-441a-970e-23544473a623']") 
elem.send_keys("pycon") 
elem.send_keys(Keys.RETURN) 
driver.close() 

Этот код возвращает ошибку, что элемент не мог найти на [@id='ce3feab5-6156-441a-970e-23544473a623'.

Я пробовал играть с фреймами, кажется, не работает. Если бы я перешел на страницу «Просмотр веб-источника», он полон JS-кода.

Есть ли хороший способ играть с такой веб-страницей с селеном?

+0

Я сожалею, что мой код не очень хорошо отформатирован. – Luke

+1

Если вы знаете, что ваш код плохо отформатирован, почему вы его не исправили? ;) –

+0

WOWOWOWOW, как вы это сделали, я попытался, и я думал, что не могу изменить его после того, как опубликую его ... Мне нужно научиться пользоваться этим сайтом. Спасибо за вашу помощь. – Luke

ответ

0

Попробуйте изменить код:

elem =driver.find_element_by_xpath("//*[@id='ce3feab5-6156-441a-970e-23544473a623']") 

в

elem =driver.find_element_by_xpath("//*[@type='email']") 
+0

Он работает !! большое спасибо!! Я новая птица здесь, так счастлив получить ответ на проблему, которая смутила меня в течение недели ... – Luke

+0

Привет, Бад, я встретил новую проблему. С той же ссылкой выше, нажмите «присоединиться сейчас», чтобы ввести страницу регистрации. Существует один элемент с именем «дата рождения». На самом деле, я могу найти элемент, однако я не могу использовать element.send_keys («12081922»), чтобы заполнить эту строку. Не было ошибок с кодом, просто не удалось правильно заполнить форму. Я также сначала попробовал element.click(), затем element.send_keys («12081922»), без ошибок, но не смог заполнить форму. – Luke

+0

@ Luke - не могли бы вы инициировать это в другом потоке, было бы лучше понять. Похоже, что это никак не зависит от этого. – nullpointer

0

Мое предположение (и наблюдения) является то, что идентификатор изменяется каждый раз при посещении страницы. Идентификатор выглядит автоматически сгенерированным, и когда я перехожу на страницу несколько раз, идентификатор каждый раз отличается.

Вам нужно будет найти что-то, что не изменится. Например, вы можете выполнить поиск атрибута name, который имеет, казалось бы, статическое значение «EMAILADDRESS»

element = driver.find_element_by_name("emailAddress") 

Вы можете также использовать выражение XPath для поиска других атрибутов, таких как data-componentname:

element = driver.find_element_by_xpath("//input[@data-componentname='emailAddress']") 

Кроме того, вместо того, чтобы жестко закодированы сна, вы можете просто подождать, пока элемент быть видимым:

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

driver = webdriver.Firefox() 
driver.get("https://www.nike.com/snkrs/login") 

element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.NAME, "emailAddress")) 
) 
+0

Цените это! – Luke

+0

Привет, Брайан, я встретил новую проблему. С той же ссылкой выше, нажмите «присоединиться сейчас», чтобы ввести страницу регистрации. Существует один элемент с именем «дата рождения». На самом деле, я могу найти элемент, однако я не могу использовать element.send_keys («12081922»), чтобы заполнить эту строку. Не было ошибок с кодом, просто не удалось правильно заполнить форму. Я также сначала попробовал element.click(), затем element.send_keys («12081922»), без ошибок, но не смог заполнить форму. – Luke

Смежные вопросы