无法使用Python&登录Facebook硒。 send_keys()没有做任何事情

时间:2015-11-26 21:23:15

标签: python facebook selenium selenium-webdriver

我正在尝试编写一个脚本来登录facebook。根据一些教程,我已经写了这个。

执行以下操作时,它只会启动Firefox,转到facebook.com并等待那里,然后失败。用户名和密码不会输入,登录按钮也不会被点击。

我可能做错了什么?我认为我的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()

3 个答案:

答案 0 :(得分:2)

您在这里做错了,您已将选择器声明为xpath,并且您正在使用该方法搜索使用ID的WebElement

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()

答案 1 :(得分:1)

我使用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();

答案 2 :(得分:0)

你很亲密!

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)