无法使用Python和Selenium登录facebook。send_keys()不执行任何操作

2024-09-25 06:38:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个登录facebook的脚本。根据一些教程,到目前为止我已经写了这篇文章。在

当执行以下命令时,它只启动Firefox,转到脸谱网在那里等待却失败了。用户名和密码不会被输入,登录按钮也不会被点击。在

我会做错什么?我想我的XPath id是正确的,用Firepath检查过了。如有任何提示,我们将不胜感激。在

from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    import unittest

    class LoginTest(unittest.TestCase):

        def setUp(self):
            self.driver = webdriver.Firefox()
            self.driver.get("https://www.facebook.com/")

        def test_Login(self):
            driver = self.driver
            fbUsername = "myemail@gmail.com"
            fbPassword = "mypassword"
            emailFieldID = ".//*[@id='email']"
            passFieldID = ".//*[@id='pass']"
            loginButtonXPath = ".//input[@value='Log In']"
            flLogoXpath = "(//a[contains(@href, 'logo')])[1]"


            emailFieldElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(emailFieldID))
            passFieldElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(passFieldID))
            loginButtonElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(loginButtonXPath))

            emailFieldElement.click()
            emailFieldElement.clear()
            emailFieldElement.send_keys(fbUsername)

            passFieldElement.click()
            passFieldElement.clear()
            passFieldElement.send_keys(fbPassword)
            loginButtonElement.click()
            WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(flLogoXpath))


        def tearDown(self):
            self.driver.quit()



    if __name__ == '__main__':
        unittest.main()

Tags: lambdaimportselfidbydefdriverelement
3条回答

我用java做了同样的测试。你可能想看看你的错误。在

// Creates a driver object for firefox
    WebDriver driver_xpath = new FirefoxDriver();

    // Goto page
    driver_xpath.get(Address);
    // email box >email address >click
    driver_xpath.findElement(By.xpath(".//*[@id='email']")).sendKeys(UserID);
    // password box >password >click
    driver_xpath.findElement(By.xpath(".//*[@id='pass']")).sendKeys(Password);
    // login button >click
    driver_xpath.findElement(By.xpath(".//*[@id='loginbutton']")).click();
    // Navigation drop button >click
    driver_xpath.findElement(By.xpath(".//*[@id='userNavigationLabel']")).click();
    //Waits for the drop down menu to show
    driver_xpath.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    // logout button >click
    driver_xpath.findElement(By.xpath("//li[12]/a/span/span")).click();
    //Close
    driver_xpath.close();

你很亲密!在

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

driver = webdriver.Firefox()
driver.get("https://facebook.com")

email = "email"
password = "pass"
login="loginbutton"
emailelement = driver.find_element_by_name(email)
passwordelement = driver.find_element_by_name(password)
emailelement.send_keys("USERNAME")
passwordelement.send_keys("PASSWORD")
loginelement = driver.find_element_by_id(login)

这里您做错了,您将选择器声明为xpath,并且使用该方法使用id搜索{}

find_element_by_id更改为find_element_by_xpath,您的问题就会得到解决。在

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import unittest

class LoginTest(unittest.TestCase):
    def setUp(self):
    self.driver = webdriver.Firefox()
        self.driver.get("https://www.facebook.com/")

    def test_Login(self):
        driver = self.driver
        fbUsername = "myemail@gmail.com"
        fbPassword = "mypassword"
        emailFieldID = ".//*[@id='email']"
        passFieldID = ".//*[@id='pass']"
        loginButtonXPath = ".//input[@value='Log In']"
        flLogoXpath = "(//a[contains(@href, 'logo')])[1]"

        emailFieldElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(emailFieldID))
        passFieldElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(passFieldID))
        loginButtonElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(loginButtonXPath))

        emailFieldElement.click()
        emailFieldElement.clear()
        emailFieldElement.send_keys(fbUsername)

        passFieldElement.click()
        passFieldElement.clear()
        passFieldElement.send_keys(fbPassword)
        loginButtonElement.click()
        WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(flLogoXpath))


    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

相关问题 更多 >