AttributeError: 'list' object has no attribute 'send_keys',python+selenium 实现QQ空间网页的自动登陆。

静态网页,在浏览器中展示的内容都在HTML源代码中。
但是,主流网站都是用JavaScript展现网页内容,和静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,所以爬取静态网页的技术无法使用。因此我们需要用到动态网页爬取的两种技术:通过浏览器审查元素解析真实网页地址和使用selenium模拟浏览器的方法。
这次用了selenium模拟浏览器方法。

from selenium import webdriver
import time
#QQ空间的url
url = r'http://qzone.qq.com'
#,实例化一个Firefox浏览器,通过executable_path参数指定Firefox驱动文件所在位置
driver = webdriver.Firefox(executable_path=r"E:\Python37\geckodriver-v0.15.0-win64\geckodriver.exe")
#打开空间页面
driver.get(url=url)
time.sleep(3)
#切换到登录表单所在的框架中
driver.switch_to.frame('login_frame')
#通过使用选择器选择表单元素-账号密码登录
driver.find_element_by_id('switcher_plogin').click()
#通过使用选择器选择表单元素-QQ号
driver.find_element_by_id('u').clear()
username = driver.find_element_by_id('u')
username.send_keys('**********')#QQ号码
time.sleep(5)
#通过使用选择器选择表单元素-密码
driver.find_element_by_id('p').clear()
password = driver.find_element_by_id('p')
password.send_keys('***')#QQ密码
time.sleep(5)
#通过使用选择器选择表单元素-登录
driver.find_element_by_id('login_button').click()
time.sleep(5)
#不知道为啥,第一次点击登录,会出现网络错误
#driver.find_element_by_id('login_button').click()
driver.quit()

重点是这次遇到的问题:AttributeError: ‘list’ object has no attribute ‘send_keys’
本来以为是python3之后不支持send_key,后来才知道是自己以为错了。
下面是错误的:

username = driver.find_elements_by_id('u')
username.send_keys('**********')#QQ号码

因为返回的是一个列表把s去掉就可以了。
或者

username = driver.find_elements_by_id('u')
username[0].send_keys('**********')#QQ号码

你可能感兴趣的:(爬虫,python)