爬虫(五)chrome动态内容(知乎(需登录))

chrome的 profile 文件在:chrome://version 的 Profile Path 里面

// cookie 模式登录,需提前手动登录

import config
import platform
import os
from splinter import Browser

def add_chrome_webdriver():
    print(platform.system())
    working_path = os.getcwd()
    library = 'library'
    path = os.path.join(working_path, library)
    os.environ['PATH'] += '{}{}{}'.format(os.pathsep, path, os.pathsep)
    print(os.environ['PATH'])

def add_cookie(browser):
    for part in config.cookie.split('; '):
        kv = part.split('=')
        d = {kv[0]: kv[1]}
        browser.cookies.add(d)
    print(browser.cookies.all())

def scroll_to_end(browser):
    browser.execute_script('window.scrollTo(0, document.body.scrollHeight);')

def start_crawler():
    # 垃圾 chrome 有 bug https://bugs.chromium.org/p/chromium/issues/detail?id=617931
    # 不能 --user-data-dir 和 --headless 一起用
    # 改回用 cookie

    with Browser(‘chrome’, headless = True) as browser:
        url = "https://www.zhihu.com"
        # 先访问一个 url,才能设置这个 url 对应的 cookie
        browser.visit(url)
        add_cookie(browser)
        # 设置好 cookie 后,刷新页面即可进入登录状态
        browser.reload()

        print(browser.html)
        scroll_to_end(browser)
        found = False

        while not found:
            print('loop')
            found = browser.is_text_present('1 天前')
            if found:
                print('拿到了最近1天动态')
                break
            else:
                scroll_to_end(browser)

def main():
    add_chrome_webdriver()
    start_crawler()


if __name__ == '__main__':
    main()

config.py
cookie = [ ]

图片.png

// 配置文件模式

  1. 在 config.py 文件设置变量,赋值 profile 的路径
  2. 加入:
option = webdriver.ChromeOptions()
argument = '--user-data-dir={}'.format(config.profile)
option.add_argument(argument)

with open Brpwser('chrome', options=option) as browser:
  1. 有个 bug
    • 垃圾 chrome 有 bug https://bugs.chromium.org/p/chromium/issues/detail?id=617931
    • 不能 --user-data-dir 和 --headless 一起用

你可能感兴趣的:(爬虫(五)chrome动态内容(知乎(需登录)))