Python Selenium 实现豆瓣登录:处理 iframe 与元素定位详解
本文详细介绍如何使用 Python Selenium 库实现豆瓣网站的模拟登录。重点解析了当登录入口嵌套在 iframe 中导致直接定位失败的问题,通过切换至 iframe 解决元素不可见错误。同时涵盖账号密码输入、清除默认文本、点击登录按钮(包括 JS 执行方式)以及获取 Cookie 的完整流程,提供关键代码片段与操作建议。
Selenium 豆瓣登录流程概述
利用 Python 爬虫框架 Selenium 访问豆瓣网站(https://www.douban.com/),旨在模拟用户完成登录操作的全过程。
网页初始界面如图所示

首先导入所需库,定位页面中显示“密码登录”的元素节点,并执行点击操作。
经分析,该按钮标签的 class_name 属性值为 'account-tab-account'。

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.douban.com/')
# 点击 密码登录 按钮 。但是找不到该element,不存在网页中
driver.find_element_by_class_name('account-tab-account').click()
解决 iframe 嵌套导致的元素定位失败
然而,上述代码执行后抛出异常,提示无法定位到目标元素。 经核查发现,该元素并未直接存在于当前网页的 DOM 源码结构中。
进一步分析表明,登录界面实际上嵌入在一个名为 iframe 的标签内。iframe 作为嵌套在网页中的独立文档,其内容无法通过父页面直接访问,因此该元素不在主网页源码中可见。

直接访问该 iframe 的 src 链接可查看到如下界面:

iframe 内部的元素不属于父网页的直接子节点,但 iframe 标签本身存在于网页源码中。要操作其内部元素,必须先定位到该 iframe 节点:

# 找到登陆的iframe
login_iframe = driver.find_element_by_xpath('//div[@class="login"]/iframe')
# 切换到iframe
driver.switch_to.frame(login_iframe)
# 点击密码登陆
driver.find_element_by_class_name('account-tab-account').click()
定位成功后,需使用 switch_to 方法切换上下文至该 iframe 内部。 经测试,此时点击操作已成功执行。

账号输入与登录执行细节
接下来,进行账号和密码的输入过程。
# 填写账号
driver.find_element_by_id('username').send_keys('123456789@163.com')
time.sleep(2)
# 填写密码
driver.find_element_by_id('password').send_keys('xxxx')
执行登录操作。
# 点击登陆按钮
driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a').click()
此外,还可以使用 JavaScript 方式触发点击事件。
通过 execute_script() 方法实现。
login_button = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a')
driver.execute_script("arguments[0].click()", login_button)
另外,在输入账号和密码之前,有时输入框内会预置“请输入账号”或“请输入密码”等提示文字(默认值)。若不清除这些内容直接输入,新输入的内容会与原有文字重叠。(本例中不会发生此情况,因为输入新内容后会自动覆盖原有的“手机号/邮箱”和“密码”字样)。如需清除输入框中的文字,可使用 clear 方法。
# 以清除用户名一栏的内容为例
driver.find_element_by_id('username').clear()
获取登录后的 Cookie 信息
最后,模拟登录的主要目的通常是为了获取 Cookie 信息。使用以下命令实现。
调用 get_cookies() 方法。
print(driver.get_cookies())
至此,关于 Python Selenium 登录豆瓣的示例详解介绍完毕,更多相关 Python Selenium 登录内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













