• 什么是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()