- 什么是selenium
selenium是python的一个第三方库,提供的接口可以操作浏览器,让浏览器完成自动化的操作
- 安装
pip install selenium
- 获取某一款浏览器的驱动程序(一谷歌为例)
谷歌浏览器驱动下载地址 : http://chromedriver.storage.googleapis.com/index.html
下载的驱动要跟浏览器的版本统一 : https://blog.csdn.net/huilan_same/article/details/51896672
- 编码流程
- 导包 : from selenium import webdriver
- 实例化某一款浏览器对象
- 自指定自动化操作代码
百度自动搜索示例:
import time from selenium import webdriver # 实例化谷歌浏览器对象,将下载好的谷歌浏览器镜像本地地址传进去 #这个地方复制完本地地址后,如果没有chromedriver.exe(文件本身的名字)的话,一定要手动加进去,我在这个地方踩坑了,弄了好久才反应过来 bro = webdriver.Chrome(executable_path=r"C:\Users\chromedriver.exe") bro.get(url="https://www.baidu.com/") # 睡两秒,方便我们看效果 time.sleep(2) # 获取到输入框 text_input = bro.find_element_by_id("kw") # 给输入框写入内容 text_input.send_keys("dog") time.sleep(2) # 找到搜索按钮,点击搜索按钮 bro.find_element_by_id("su").click() time.sleep(3) # 获取当前页面的源码数据,存入文件 page_text = bro.page_source with open("dog.html","w",encoding="utf-8") as f: f.write(page_text) bro.quit()
获取豆瓣电影中更多电影详情数据
获取豆瓣更多电影详情数据的时候,浏览器页面滚轮滚动的时候,会自动加载当前页的数据,如果我们没有其他操作的话,只是获取的当前页(也就是我们肉眼看到的这部分),我们要获取更多数据的话,需要借助js代码,使得滚轮尽可能多的滚动,从而达到获取更多数据的目的
url = 'https://movie.douban.com/typerank?type_name=%E6%83%8A%E6%82%9A&type=19&interval_id=100:90&action=' bro = webdriver.Chrome(executable_path=r'C:\Users\Administrator\chromedriver.exe') bro.get(url) sleep(3) # 让滚轮自动滑动,这里滑动了三次 bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') sleep(3) bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') sleep(3) bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') #滑动完后在停两秒,以免最后一次滑动显示的数据获取不到 sleep(2) page_text = bro.page_source with open('./douban.html','w',encoding='utf-8') as fp: fp.write(page_text) sleep(1) bro.quit()
在我们实际环境中,为了获得更好的用户体验,有可能是不需要将页面操作展示给用户看的,这里介绍一种谷歌无头浏览器,隐藏页面操作,只将结果反馈给用户
#直接加入这些数据就可以,不需要其他操作
from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') #获取豆瓣电影中更多电影详情数据 url = 'https://movie.douban.com/typerank?type_name=%E6%83%8A%E6%82%9A&type=19&interval_id=100:90&action=' bro = webdriver.Chrome(executable_path=r'C:\Users\Administrator\Desktop\爬虫+数据\day_03_爬虫\chromedriver.exe',chrome_options=chrome_options) bro.get(url) sleep(3) bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') sleep(3) bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') sleep(3) bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') sleep(2) page_text = bro.page_source with open('./douban.html','w',encoding='utf-8') as fp: fp.write(page_text) print(page_text) sleep(1) bro.quit()
还有另外一种隐藏浏览器操作的方法,就是phantomJS,但是最近已经停止维护了,所以这里只介绍一下,尽量用上面的无头浏览器,这种方法只是改变了webdriver调用的方法,其他都没有变
url = 'https://movie.douban.com/typerank?type_name=%E6%83%8A%E6%82%9A&type=19&interval_id=100:90&action=' # 只是这里调用的方法改变了,其他的没有变 bro = webdriver.PhantomJS(executable_path=r'C:\Users\Administrator\chromedriver.exe') bro.get(url) sleep(3) # 让滚轮自动滑动,这里滑动了三次 bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') sleep(3) bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') sleep(3) bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') #滑动完后在停两秒,以免最后一次滑动显示的数据获取不到 sleep(2) page_text = bro.page_source with open('./douban.html','w',encoding='utf-8') as fp: fp.write(page_text) sleep(1) bro.quit()
QQ空间自动登录界面操作
#qq空间 bro = webdriver.Chrome(executable_path=r'C:\Users\Administrator\Desktop\chromedriver.exe') url = 'https://qzone.qq.com/' bro.get(url=url) sleep(2) #定位到一个具体的iframe bro.switch_to.frame('login_frame') bro.find_element_by_id('switcher_plogin').click() sleep(2) bro.find_element_by_id('u').send_keys('QQ账号') bro.find_element_by_id('p').send_keys('密码') bro.find_element_by_id('login_button').click() sleep(5) page_text = bro.page_source with open('qq.html','w',encoding='utf-8') as fp: fp.write(page_text) bro.quit()