python+chrome+docker运行环境配置

 

正常爬取网页不需要有浏览器支持,只要python配置相应的包就行。但是如果想要进行模拟登陆等功能,就需要有浏览器支持了。我采用的是selenium+bs4的模块,浏览器驱动采用的是chrome的webdriver,这个在selenium中有。

from selenium import webdriver
import time
from bs4 import BeautifulSoup

主要爬取过程很简单,这里就是列出几个关键。

首先是配置驱动浏览器

    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    #chrome_options.add_argument(r"user-data-dir=/usr/local")
    #chrome_options.add_argument("window-size=1024,768")
    # 添加沙盒模式
    chrome_options.add_argument("--no-sandbox")
    browser = webdriver.Chrome(chrome_options=chrome_options)
    #这里的driver就是上面配置好的browser浏览器对象,url为自己想访问的网址,这里指向登陆界面,下面是模仿登陆过程。
    driver.get(url)
    print(driver.current_url)
    
    # 进入登陆页面,输入账户名和密码,find_element_by_xpath用来定位标签,send_keys用来向标签输入内容,click()是点击动作,这是登陆模仿动作的关键步骤。网页内部也是重复这个工程
    driver.find_element_by_xpath('/html/body/div/div/form/div[3]/div[2]/input').send_keys(account)
    driver.find_element_by_xpath('/html/body/div/div/form/div[4]/div[2]/input').send_keys(password)
    # 点击登陆
    driver.find_element_by_xpath('/html/body/div/div/form/div[5]/button').click()
    #这两步是为了获取cookies,但是我没用到。
    driver.refresh()
    cookies = driver.get_cookies()
    # 等待加载登陆进入管理界面,这个一般都需要等待页面渲染,否则得不到想要的页面,这里是个坑,注意时间掌控,一半1s足以,这里为了保险起见,弄了各5秒。
    time.sleep(5)
    #这里是为了查看当前浏览器的网页
    res = driver.page_source
    print(res)
    # 点击节点管理进入节点页面
    driver.find_element_by_xpath("//body//h3/a").click()

爬取网页很简单就是配置驱动wedriver的docker环境很麻烦。主要是不知道怎么在docker中安装浏览器,参考的几个都是安装失败。结合同事的参考,终于把这个给搞定了,这里mark一下。

 

你可能感兴趣的:(python,docker,python3,chrome)