我尝试使用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)
执行的代码,但登录后未获得仪表板页面,登录表单弹出窗口仍然可见。
答案 0 :(得分:1)
您需要在此注意以下两个事实:
maximize_window()
,请始终使用 ChromeOptions()
的实例。https://www.flipkart.com/
基于ReactJS,因此 WebDriverWait 是不可避免的,因此您需要删除implicitly_wait()
的所有实例作为{{3 }}提到:请勿混合
implicit
和explicit
等待。这样做可能导致无法预测的等待时间。
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()
浏览器快照:
答案 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
答案 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);
}
}