python - 无法使用 Python 和 Selenium 登录 facebook。 send_keys() 没有做任何事情

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

最佳答案

您在这里做错的是,您已将选择器声明为 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()

关于python - 无法使用 Python 和 Selenium 登录 facebook。 send_keys() 没有做任何事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33947203/

相关文章:

python - 对于具有标准用户模型的具有外键的模型,RelatedObjectDoesNotExist

python - 将列值分配给数据框中的变量

java - 通过 Jenkins 测试失败时如何存储 Selenium 屏幕截图

python - 关于 Python 中空 (' ' ) 字符串的字符串方法的问题

python - 为什么这不能用作数组成员资格测试?

java - Android 静默发帖到 Facebook

openid - Facebook Connect 是一种实用的用户导入方式吗?它是怎么做到的?

css - 导致水平滚动的 Facebook 发送按钮

python - Scrapy 可以和 Chrome 浏览器一起使用吗?

python - Nose 跳过调试消息