我正在尝试编写一个脚本来登录 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/