基于Python+Selenium+Chrome headless 模式入门

1. 概述

基于Python, Selenium, Chrome headless (无头浏览器) 访问页面, 并将内容保存到本地文件.

初步干了一次爬数据的工作,写一写入门的心得.分享一下,不足之处未来逐步完善.

2. 环境准备

Python 3.6.5 

    注:这个附带的工具 IDLE (Python 3.6 64-bit) 调试很方便.按F5就行了

Selenium 2.0 

    注: 需要带 WebDriver 

Chrome 59以上版本可以运行Headless模式

3. 代码实例

主要功能与步骤

1) 使用chrome headless 模式打开页面

2) 根据页面标签,利用Selenium 定位需要查找和分析页面相关内容

3) 将有用的功能,写入指定文件

废话不多直接上代码

# 引入休眠等待库

import time

# 引入selenium的浏览器驱动接口

from selenium import webdriver

# 引入chrome选项

from selenium.webdriver.chrome.options import Options

# 配置chrome浏览器(无头模式)

chrome_options = Options()

chrome_options.add_argument('--headless')

driver = webdriver.Chrome(chrome_options=chrome_options)

# 没有写错,就是要页面够长.不然页面内容会点不到 (第一个坑)

driver.set_window_size(1024, 7680)

# 加载页面

driver.get("https://www.example.com")

# 这里进行嵌套,模拟点击打开详细页,可以抓取详细内容

for i in range(1,21):

    # 根据css中的class查找对应的element 集合

    counts = len(driver.find_elements_by_css_selector(".item_con_list .position_link"))

    print ("第" + str(i) + "页,本页共有:" + str(counts) + "条记录")

    for j in range(counts):

        # 新开一个窗口

        url = driver.find_elements_by_css_selector(".item_con_list .position_link")[j]

        print('  跳转第' + str(j) + "条:" + url.get_attribute("href"))

        url.click()

        time.sleep(1)

        # 获取当前窗口句柄集合

        handles = driver.window_handles

        # 切换窗口

        for handle in handles:

            if handle!=driver.current_window_handle:

                driver.switch_to_window(handle)

                # 找到内容

                try:

                    data = driver.find_element_by_class_name("job_bt").text

                except:

                    print("这个页面没拿到内容")

                    driver.save_screenshot(i+str(j)+".png")

                # 写入内容 ,要保持编码一致,不然会出现保存出错 (第二个坑)

                fileObject = open('example.txt', 'a', encoding='utf-8')

                fileObject.write(data) 

                fileObject.write('\n') 

                fileObject.close()

                break

        #关闭当前窗口   

        driver.close()

        #切换(主)窗口

        driver.switch_to_window(handles[0])

        time.sleep(1)

        #生成当前页面快照,调试用的

        driver.save_screenshot("current.png")

    # 跳转到下一页

    driver.find_element_by_class_name("pager_next").click()

    print("跳转到下一页")

    time.sleep(5)

# 关闭浏览器

driver.quit()

你可能感兴趣的:(基于Python+Selenium+Chrome headless 模式入门)