menu Chancel's blog
rss_feed
Chancel's blog
我就是这样的人

使用Selenium+ChromeDriver进行数据爬虫

作者:Chancel, 更新:2019 Mar 01, 字数:3319, 已阅:666

这篇文章更新于 1557 天前,文中部分信息可能失效,请自行甄别无效内容。

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

工具

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

配置

1. 安装Python

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

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

  • 根据你的Google Chrome版本下载Google ChromeDriver
    • https://chromedriver.storage.googleapis.com/index.html?path=72.0.3626.69/
  • 移动Google ChromeDriver
    • Windows
      • 移动到Python的安装目录下即可,或配置在Path路径中
    • Linux
      • 移动至/usr/bin目录下(或者添加Google Chrome和Google ChromeDriver到Path)

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()

参考资料文档

  • Selenium参考文档
    • https://www.seleniumhq.org/docs/
  • ChromeDriver参考文档
    • http://chromedriver.chromium.org/

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

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]
目录