Home > Software design >  Python - Using Selenium to Login to Web
Python - Using Selenium to Login to Web

Time:07-27

I cannot login to this site with Selenium.

This is the url.

https://www.burn-cycle.com/my-account/pearl-district

What I tried:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import yaml
import time

conf = yaml.full_load(open("login_details.yml"))
my_burn_email = conf["user"]["email"]
my_burn_password = conf["user"]["password"]

driver = webdriver.Chrome()

driver.get("https://www.burn-cycle.com/my-account/pearl-district")
time.sleep(1)
username = driver.find_element(By.XPATH, "//*[@id='USERNAME']")
username.send_keys(my_burn_email)
pw = driver.find_element(By.XPATH, "//*[@id='PASSWORD']")
pw.send_keys(my_burn_password)
login_button = driver.find_element(By.XPATH("//*[@id='liFormWrap']/form[1]/button")).click()

The website loads (slowly) but nothing populates. This is the output:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='USERNAME']"}
  (Session info: chrome=103.0.5060.134)

What am I doing wrong?

CodePudding user response:

You need to wait for the website to load completely so that you can fetch those elements from the webpage, you can achieve this by using implicitly.wait(#amount of second) command right after initializing the web driver.

driver = webdriver.Chrome()
driver.implicitly_wait(15) # gives an implicit wait for 15 seconds

CodePudding user response:

the element is under iframe, you need try this way, first switch into iframe, see this link

   driver.get("https://www.burn-cycle.com/my-account/pearl-district")
   time.sleep(5)
   iframe = driver.find_element(By.XPATH, "//*[@id='sf-frame']")
   # switch to selected iframe
   driver.switch_to.frame(iframe)

   username = driver.find_element(By.XPATH, "//input[@data-val-required='Username is required']")
   username.send_keys("test")
  • Related