如何使用凭据登录到https://www.flipkart.com/网站

时间:2018-07-16 17:14:49

标签: python selenium selenium-webdriver webdriver webdriverwait

我尝试使用python硒登录 Flipkart 网站。

代码

from selenium import webdriver
import time

driver = webdriver.Chrome('location to chrome driver')
driver.get('https://www.flipkart.com/')
driver.maximize_window()
driver.implicitly_wait(15)
time.sleep(10)
driver.find_element_by_class_name('_2zrpKA').send_keys(username)
driver.find_element_by_xpath('//input[@type = "{}"]'.format('password')).send_keys(Password)
driver.find_element_by_xpath('//span[contains(text(), "{}")]'.format('login')).click()

使用exit code 0 (No errors)执行的代码,但登录后未获得仪表板页面,登录表单弹出窗口仍然可见。

5 个答案:

答案 0 :(得分:1)

您需要在此注意以下两个事实:

  • 要最大化使用 Chrome浏览器而不是使用maximize_window(),请始终使用 ChromeOptions() 的实例。
  • 由于网站https://www.flipkart.com/基于ReactJS,因此 WebDriverWait 是不可避免的,因此您需要删除implicitly_wait()的所有实例作为{{3 }}提到:
  

请勿混合implicitexplicit 等待。这样做可能导致无法预测的等待时间。

  • 也删除硬编码的time.sleep()
  • 在发送username字符序列之前,您需要诱使 WebDriverWait 使所需的元素可点击
  • 这是您自己的代码,用于实现上述更改:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get('https://www.flipkart.com/')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(.,'Enter Email/Mobile number')]//preceding::input[1]"))).send_keys("siva")
    driver.find_element_by_xpath("//span[contains(.,'Enter Password')]//preceding::input[1]").send_keys("narayana")
    driver.find_element_by_xpath("//button[@type='submit']//span[contains(.,'Login')]").click()
    

浏览器快照:

Explicit and Implicit Waits

答案 1 :(得分:0)

您的登录按钮xPath不正确。这将起作用:

//button[@type = 'submit']/span

完整代码为:

from selenium import webdriver
import time

driver = webdriver.Chrome('location to chrome driver')
driver.get('https://www.flipkart.com/')

driver.maximize_window()
driver.implicitly_wait(15)

time.sleep(10)
driver.find_element_by_class_name('_2zrpKA').send_keys(username)
driver.find_element_by_xpath('//input[@type = "{}"]'.format('password')).send_keys(Password)
driver.find_element_by_xpath("//button[@type = 'submit']/span").click()

也可以使用WebDriverWait代替硬编码的暂停:

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

driver = webdriver.Chrome('location to chrome driver')
driver.get('https://www.flipkart.com/')
driver.maximize_window()

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "_2zrpKA"))).send_keys("username")
driver.find_element_by_xpath('//input[@type = "{}"]'.format('password')).send_keys("password")
driver.find_element_by_xpath("//button[@type = 'submit']/span").click()

这将更快地执行。可以找到更多信息here

答案 2 :(得分:0)

您可以尝试以下一种方法:

driver = webdriver.Chrome('location to chrome driver')
driver.maximize_window()
driver.get("https://www.flipkart.com/")

username = driver.find_element_by_css_selector("form[autocomplete] input[type='text']")
username.send_keys("username")

password = driver.find_element_by_css_selector("form[autocomplete] input[type='password']")
password.send_keys("password")  

login_button = driver.find_element_by_xpath("//span[text()='Login']/ancestor::button")
login_button.click()

请确保导入以下内容:

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

您可以引入显式等待(webdriver等待)。但是,仅出于登录目的,您不需要。但是,如果要使flipkart(IMO)自动化,则应该明确等待。

答案 3 :(得分:0)

“方式”框中的“以文本形式登录”有两个可用元素。您的xpath指向第一个标签Login。因此,您需要按如下所示修改XPath

driver.find_element_by_xpath('//button//span[contains(text(), "{}")]'.format('login')).click()

您的Xpath指向红色突出显示的框。但是预期的登录名是绿色突出显示的按钮。因此,只需在您的xpath之前添加//button

enter image description here

答案 4 :(得分:0)

 public class Flipkart {

public static void main(String[] args) throws InterruptedException
{
  System.setProperty("webdriver.chrome.driver","D:\\chromedriver.exe");

  WebDriver driver=new ChromeDriver();

  driver.get("http://www.flipkart.com/");    

  driver.manage().window().maximize();

  driver.findElement(By.xpath(".//*[@class='_2zrpKA _1dBPDZ']")).sendKeys("naveen@gmail.com");

  driver.findElement(By.xpath(".//*[@class='_2zrpKA _3v41xv _1dBPDZ']")).sendKeys("Hahaha@9090");

  driver.findElement(By.xpath(".//*[@class='_2AkmmA _1LctnI _7UHT_c']")).click();

  Thread.sleep(300);
}
}