#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()
案例:爬取某网站招聘信息
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()