menu Chancel's Blog
rss_feed lightbulb_outline

使用Selenium+ChromeDriver进行数据爬虫

warning 这篇文章距离上次更新于936天前,文中部分信息可能已失效,请自行甄别无效内容。

演示如何在Windows/CentOS下安装跟使用ChromeDriver进行爬虫抓取,例子所用代码为Python

工具

  • Google Chrome 72.0
  • Google ChromeDriver(支持Selenium的Chrome框架)
  • Selenium(爬虫自动化框架)

配置

1. 安装Python

  • 下载Python,傻瓜式下一步安装即可,记得勾选添加到Path里或手动添加安装路径到Path中

2. Google Chrome

  • Windows

  • Linux

    • 配置Yum源

         cd /ect/yum.repos.d/
        vim google-chrome.repo
    • 写入下面内容

      [google-chrome]
      name=google-chrome
      baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
      enabled=1
      gpgcheck=1
      gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
    • 安装Google Chrome浏览器(安装完成记得看版本号)

        yum -y install google-chrome-stable --nogpgcheck

3. 安装Google ChromeDriver

4. 安装Python依赖库

  • 安装selenium、json、requests

      pip install selenium json requests

代码

模拟登录Baidu并获取Cookies代码

# -*-  coding:utf-8 -*-

# 导入webdriver
from selenium import webdriver
import json
import os
import requests
import time
from flask import Flask
# 要想调用键盘按键操作需要引入keys包
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

def get_cookies():
    # Linux下创建ChromeOptions
    print('正在创建Chrome实例')
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument("window-size=1024,768")
    chrome_options.add_argument("--no-sandbox")

    # 无界面模式
    driver = webdriver.Chrome(chrome_options=chrome_options)

    # Windows下有界面模式
    # driver = webdriver.Chrome()

    # 如找不到则需指定ChromeDriver的位置(2019年2月21日 -- 即使指定也会出错,将ChromeDriver放到目录下可解决)
    # driver = webdriver.PhantomJS(executable_path = "./phantomjs")

    # get方法会一直等到页面加载,然后才会继续程序,通常测试会在这里选择time.sleep(2)
    print('正在访问https://www.baidu.com/,并尝试登录')
    try:
        driver.get("https://www.baidu.com/")

        # 如获取参数有误,则可以使用这个方法来测试看加载页面是否正确
        # print(driver.page_source)

        # 输入用户名
        data = driver.find_element_by_id('TANGRAM__PSP_10__userName').send_keys('username')
        # 输入密码
        data = driver.find_element_by_id('TANGRAM__PSP_10__password').send_keys('passwd')
        # 勾选记住我
        data = driver.find_element_by_id('TANGRAM__PSP_10__memberPass').send_keys(Keys.SPACE)
        # 尝试登录用户
        data = driver.find_element_by_id('TANGRAM__PSP_10__submit').click()
        print('正在尝试登录')
        time.sleep(2)
        # 打印Cookie
    except:
        print('网页登录请求失败,请检查网络状态')
        return False
    cookies = driver.get_cookies()
    print(cookies)
    # 退出浏览器
    driver.quit()
    print('浏览器已退出')
    return True

if __name__ == '__main__':
    get_cookies()

参考资料文档

博文目录

[[replyMessage== null?"发表评论":"@" + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageList.data.items.length]])

[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[messageItem.m_environ.browser]] [[messageItem.m_environ.os]] [[messageItem.m_environ.device]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[subMessage.m_environ.browser]] [[subMessage.m_environ.os]] [[subMessage.m_environ.device]]