爬虫4-selenium浏览器自动化
零、代码功能
1、自动登录博客网站并发表评论
# -*- coding: utf-8 -*-
"""
Spyder 编辑器
这是一个临时脚本文件。
"""
from selenium import webdriver
browser=webdriver.Chrome()
browser.get('https://wpblog.x0y1.com')
bnt_login=browser.find_element_by_link_text('登录')
bnt_login.click()
user=browser.find_element_by_id('user_login')
user.send_keys('codetime')
psd=browser.find_element_by_id('user_pass')
psd.send_keys('shanbay520')
submit=browser.find_element_by_id('wp-submit')
submit.click()
essay=browser.find_element_by_link_text('2006年~2019年中国国内生产总值 (GDP) 统计')
essay.click()
talk=browser.find_element_by_id('comment')
talk.send_keys('test')
talk_submit=browser.find_element_by_id('submit')
talk_submit.click()
browser.quit()
2、在博客网站里打印出含有python的文章标题
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 17 16:52:35 2021
@author: 25483
"""
from selenium import webdriver
import time
browser=webdriver.Chrome()
browser.get('https://wpblog.x0y1.com/')
search=browser.find_element_by_id('search-form-1')
search.send_keys('python')
submit=browser.find_element_by_class_name('search-submit')
submit.click()
"""
link=browser.find_elements_by_partial_link_text('Python')
for i in link:
print(i.text)
#不行,因为不止出现一次
"""
link=browser.find_elements_by_class_name('entry-title')
for i in link:
print(i.text)
time.sleep(5)
browser.close()
一、selenium介绍及准备
1、selenium:
浏览器自动化测试框架,原本用于网页测试。控控制浏览器,模拟人的操作,如登录网页,点击、输入内容等,像有无形的手,自动控制鼠标和键盘,帮助干活(有点诡异~)
2、安装selenium
(1)导入selenium库
和安装Python其他的库一样,pip install selenium,anaconda里可直接在navigator里搜索安装。
(2)安装浏览器驱动
一般用chrome浏览器,所以驱动也是chromedriver,驱动镜像网站https://npm.taobao.org/mirrors/chromedrive。
查看chrome浏览器版本(右边三个星号-帮助-关于google chrome)
点进去网站找版本最接近的镜像,下载,windows选择chromedriver_win32,解压文件
把exe文件放入python的根目录中的scripts文件夹内,若用anaconda,则选择anaconda的scripts。
二、selenium获取数据
打开浏览器——获取网页数据——关闭浏览器
# 从 selenium 中导入 webdriver(驱动)
from selenium import webdriver
# 选择 Chrome 浏览器打开
browser = webdriver.Chrome()
# 打开网页
browser.get('https://wpblog.x0y1.com')
# 打印出网页源代码
print(browser.page_source)
# 关闭浏览器
browser.quit()
注意:用selenium获得的网页源代码,是数据加载完毕最终的源代码,网页加载后通过API获取的数据也在这,所以不用考虑静态网页和动态网页的问题。
有些网页内容较多,加载较慢,可以通过time.sleep(5),需要导入time模块,等几秒种在打印出网页,以确保获得的网页是完整的。
三、处理数据
selenium查找元素的方法如下
1、查找第一个符合条件的元素
2、查找所有符合条件的元素
3、文本内容和属性值
通过上方图片上的方法获得的都是WebElement对象
# <a href="http://code.shanbay.com">扇贝编程</a>
link = browser.find_element_by_link_text('扇贝编程')
print(link.get_attribute('href'))
# 输出:http://code.shanbay.com
print(link.text)
# 输出:扇贝编程
4、控制浏览器
例1、自动登录博客发表评论
from selenium import webdriver
browser = webdriver.Chrome()
# 打开博客
browser.get('https://wpblog.x0y1.com')
# 找到登录按钮
login_btn = browser.find_element_by_link_text('登录')
# 点击登录按钮
login_btn.click()
# 找到用户名输入框
user_login = browser.find_element_by_id('user_login')
# 输入用户名
user_login.send_keys('codetime')
# 找到密码输入框
user_pass = browser.find_element_by_id('user_pass')
# 输入密码
user_pass.send_keys('shanbay520')
# 找到登录按钮
wp_submit = browser.find_element_by_id('wp-submit')
# 点击登录按钮
wp_submit.click()
# 找到第一篇文章
more_link = browser.find_element_by_class_name('more-link')
# 点击第一篇文章
more_link.click()
# 找到评论框
comment = browser.find_element_by_id('comment')
# 输入评论
comment.send_keys('由 selenium 自动评论')
# 找到发表评论按钮
submit = browser.find_element_by_id('submit')
# 点击发表评论按钮
submit.click()
# 关闭浏览器
browser.quit()
思路:先由selenium查找元素的方法找到对应元素,然后调用其click()方法点击该元素(链接或按钮),用send_keys()方法模拟键盘出入内容
selenium学习文档:https://selenium-python-zh.readthedocs.io/en/latest/
五、总结
1、selenium
2、获取数据
3、处理数据
(1)查找元素的方法
文本内容和属性
(2)操作浏览器的方法
click()和send_keys()
4、认真分析网页源代码
5、用到的网站
浏览器驱动镜像
https://npm.taobao.org/mirrors/chromedriver
要操作的网站
https://wpblog.x0y1.com
selenium学习文档
https://selenium-python-zh.readthedocs.io/en/latest/