入坑爬虫(七)selenium自动化测试工具的使用

1 什么是selenium

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏.

2 PhantomJS的介绍

PhantomJS 是一个基于Webkit的“无界面”(headless)浏览器,它会把网站加载到内存并执行页面上的 JavaScript

下载地址:http://phantomjs.org/download.html

3 Chromedriver的介绍

Chromedriver 也是一个能够被selenium驱动的浏览器,但是和PhantomJS的区别在于它是有界面的

下载地址:https://npm.taobao.org/mirrors/chromedriver

4 driver的安装

最简单的安装方式是:直接将上面下载好的驱动,放到python的安装路径下.(如果会配置环境变量的小伙伴也可以自己调整)

5 chromedriver安装示例

----- Windows 下安装方式
chromedriver_win32.zip : 版本 ChromeDriver v2.32 (2017-08-30)
(支持 Chrome v59-61)

1. 解压 chromedriver_win32.zip
2. 将 chromedriver 移动到 Python安装目录下
(其实放哪都可以,但是需要配环境变量,放Python安装目录下省事)


注意:Chromedriver和电脑上的chrome版本有对应关系,建议使用最新的Chromedriver版本并且更新chrome浏览器到最新版

映射表:
这里写图片描述

selenium的基本使用

1 加载网页:
selenium通过控制浏览器,所以对应的获取的数据都是elements中的内容

from selenium import webdriver 
# 指定driver的绝对路径
# driver = webdriver.PhantomJS() 
driver = webdriver.Chrome()
# 向一个url发起请求
driver.get("https://www.baidu.com")
# 把网页保存为图片
driver.save_screenshot("baidu.png")
# 退出模拟浏览器
driver.quit() # 一定要退出!不退出会有残留进程!

2 定位和操作:
以百度搜索为例

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

driver.find_element_by_id('kw').send_keys('python')
driver.find_element_by_id('su').click()

time.sleep(6)
driver.quit()

3 查看请求信息:

driver.page_source # 查看网页源码
driver.get_cookies() # # 获取当前浏览器的全部cookies
driver.current_url # 获取当前页面的url

4 退出

driver.close() #退出当前页面
driver.quit()  #退出浏览器

小结
selenium的导包:from selenium import webdriver
selenium创建driver对象:webdriver.PhantomJS()
selenium请求数据:driver.get(“http://www.baidu.com/“)
selenium查看数据: driver.page_source
关闭无界面浏览器: driver.quit()
根据id定位元素: driver.find_element_by_id(“kw”)
操作点击事件: click()
给输入框赋值:send_keys()

案例:爬取某网站招聘信息

扫描二维码关注公众号,回复: 3306116 查看本文章
from selenium import webdriver
import time

class Lagou(object):

    def __init__(self, name, password):
        opt = webdriver.ChromeOptions()
        opt.add_argument('headless')
        self.driver = webdriver.Chrome()# chrome_options=opt
        self.emal = name
        self.password = password

    def Login(self):

        self.driver.get('https://passport.lagou.com/login/login.html')
        name = self.driver.find_element_by_xpath('/html/body/section/div[1]/div[2]/form/div[1]/input')
        name.send_keys(self.name)
        pwd = self.driver.find_element_by_xpath('/html/body/section/div[1]/div[2]/form/div[2]/input')
        pwd.send_keys(self.password)
        self.driver.find_element_by_xpath('/html/body/section/div[1]/div[2]/form/div[5]/input').click()
        time.sleep(2)
        soso = self.driver.find_element_by_xpath('//*[@id="search_input"]')
        soso.send_keys('爬虫')
        self.driver.find_element_by_xpath('//*[@id="search_button"]').click()


    def get_url(self):
        data_list = self.driver.find_elements_by_xpath('//*[@id="s_position_list"]/ul/li/div[1]/div[1]/div[1]/a')
        url_list = list()
        for data in data_list:
            url = data.get_attribute('href')
            url_list.append(url)
        return url_list

    def page_next(self):
        js = 'scrollTo(0,4000)'
        self.driver.execute_script(js)
        self.driver.find_element_by_xpath('//*[@id="s_position_list"]/div[2]/div/span[6]').click()


    def parse_data(self, url):

        f = self.driver.find_element_by_xpath
        self.driver.get(url)
        work_list = list()
        temp = dict()
        temp['company'] = f('/html/body/div[2]/div/div[1]/div/div[1]').text
        temp['work'] = f('/html/body/div[2]/div/div[1]/div/span').text
        temp['require'] = f('/html/body/div[2]/div/div[1]/dd/p[1]').text
        temp['welfare'] = f('//*[@id="job_detail"]/dd[1]/p').text
        temp['work_req'] = f('//*[@id="job_detail"]/dd[2]').text.replace('\n', '')
        temp['add'] = f('//*[@id="job_detail"]/dd[3]/div[1]').text
        work_list.append(temp)
        print(work_list)
        return work_list

    def save_data(self):
        pass

    def run(self):
        self.Login()
        time.sleep(3)
        count = 0
        while True:
            count += 1
            time.sleep(3)
            url_list = self.get_url()
            time.sleep(3)
            for url in url_list:
                self.parse_data(url)
            self.page_next()

if __name__ == '__main__':

    lagou = Lagou('用户名','密码')
    lagou.run()

猜你喜欢

转载自blog.csdn.net/u011504907/article/details/81535673