本文带你了解如何在 Python 中使用带有 Chrome 驱动程序的 Selenium 库自动登录网站以及验证登录成功。
Python Selenium如何自动登录?从程序控制 Web 浏览器在许多场景中都很有用,示例用例是网站文本自动化和Web 抓取,这种自动化非常流行的框架是 Selenium WebDriver。
如何使用Selenium实现自动登录?Selenium WebDriver是一个浏览器控制库,它支持所有主流浏览器(Firefox、Edge、Chrome、Safari、Opera 等),并且适用于包括 Python 在内的不同编程语言。在本教程中,我们将使用其Python 绑定来自动登录网站。
将登录过程自动化到网站被证明是很方便的。例如,你可能希望自动编辑你的帐户设置,或者你希望提取一些需要登录的信息等。
我们有一个关于使用BeautifulSoup库提取 Web 表单的教程,因此你可能希望结合提取登录表单并在本教程的帮助下填充它们。
Python Selenium自动登录示例介绍 - 首先,让我们为 Python 安装 Selenium:
pip3 install selenium
下一步是安装特定于我们要控制的浏览器的驱动程序,此页面上提供了下载链接。我正在安装ChromeDriver,但你可以随意使用你最喜欢的。
为了使事情具体化,我将使用Github 登录页面来演示如何使用 Selenium 自动登录。
Python Selenium如何自动登录?打开一个新的 Python 脚本并初始化 WebDriver:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
# Github credentials
username = "username"
password = "password"
# initialize the Chrome driver
driver = webdriver.Chrome("chromedriver")
为你的操作系统下载并解压缩驱动程序后,将其放在你的当前目录或已知路径中,以便你可以将其传递给webdriver.Chrome()
类。就我而言,chromedriver.exe位于当前目录中,因此我只需将其名称传递给构造函数。
如何使用Selenium实现自动登录?由于我们对自动化 Github 登录感兴趣,我们将导航到 Github 登录页面并检查该页面以识别其 HTML 元素:
的id
登录名和密码输入框,和名称的登录按钮将是有用的为我们检索这些代码元素并插入到它编程。
Python Selenium自动登录示例:请注意,用户名/电子邮件地址输入字段有login_field
id
,其中密码输入字段有id
of password
,另请参阅提交按钮有name
of commit
,下面的代码转到 Github 登录页面,提取这些元素,填写凭据,然后单击按钮:
# head to github login page
driver.get("https://github.com/login")
# find username/email field and send the username itself to the input field
driver.find_element_by_id("login_field").send_keys(username)
# find password input field and insert password as well
driver.find_element_by_id("password").send_keys(password)
# click login button
driver.find_element_by_name("commit").click()
该find_element_by_id()
函数通过其检索一个 HTML 元素id
,该send_keys()
方法模拟按键操作,上面的代码单元格将使 Chrome 输入电子邮件和密码,然后单击登录按钮。
Python Selenium如何自动登录?接下来要做的是确定我们的登录是否成功,有很多方法可以检测到这一点,但在本教程中,我们将通过检测登录时显示的错误来完成(当然,这将从网站到另一个)。
div
元素,该元素的类"flash-error"
具有“不正确的用户名或密码”文本。.
下面的Python Selenium自动登录示例代码负责使用 执行登录后等待页面加载WebDriverWait()
,并检查错误:
# wait the ready state to be complete
WebDriverWait(driver=driver, timeout=10).until(
lambda x: x.execute_script("return document.readyState === 'complete'")
)
error_message = "Incorrect username or password."
# get the errors (if there are)
errors = driver.find_elements_by_class_name("flash-error")
# print the errors optionally
# for e in errors:
# print(e.text)
# if we find that error message within errors, then login is failed
if any(error_message in e.text for e in errors):
print("[!] Login failed")
else:
print("[+] Login successful")
我们使用 WebDriverWait 等待文档加载完成,该execute_script()
方法在浏览器的上下文中执行 Javascript,页面加载时return document.readyState === 'complete'
返回JS 代码True
,False
否则。
最后,我们关闭我们的驱动程序:
# close the driver
driver.close()
Python Selenium如何自动登录?总结
好的,现在你可以自动登录到你选择的网站,请注意,当你使用错误的凭据多次运行脚本时,Github 会阻止你,因此请注意这一点。
现在你可以在使用你的帐户登录后做你想做的事情,你可以在我们打印“登录成功”的行中添加代码。
此外,如果你使用真实帐户成功登录,你可能会遇到电子邮件确认,要绕过它,你必须使用 Python以编程方式阅读你的电子邮件并提取确认代码,然后使用 Selenium 实时插入,太好了挑战,不是吗?祝你好运!