简介
浏览器自动化测试框架,它可以像真人操作一样来访问浏览器,可以用于调试网站在不同浏览器的适配程度,它支持的语言很多。它本质上就是利用JavaScript来对浏览器进行模拟真人调试
包和驱动/对象
包
浏览器驱动
下载网址:https://sites.google.com/a/chromium.org/chromedriver/downloads
注意:本机的浏览器版本要和浏览器驱动的支持版本适配,否则会报错
Chrome对象
方法
get 打开目标网页
quit 关闭浏览器
get_cookies 获取cookies
get_cookie(cookieName) 获取目标cookie
属性
page_source 页面dom结构以及js
maximize_window() 最大化窗体
python调用
from selenium import webdriver
#浏览器对象
browser = webdriver.Chrome(executable_path="/Users/user3/python/selenium.exe")
print(browser.page_source)
# browser返回的就是一个整页
模拟应用案例
页面元素提取
当它转换成selector的时候,就可以使用xpath和css选择器
from scrapy.selector import Selector
browser = webdriver.Chrome(executable_path="/Users/user3/python/selenium.exe")
#生成selector
t_selector = Selector(text=browser.page_source)
t_selector.css("")
t_selector.xpath("")
模拟访问浏览器
怎么用这个浏览器驱动对象打开浏览器,get方法
browser.get("https://www.zhihu.com/#signin")
模拟向输入框输入数据/点击按钮
css选择器:find_element_by_css_selector()
xpath选择器:find_element_by_xpath_selector()
紧接着调用send_keys()模拟键盘输入,click()模拟鼠标点击
browser = webdriver.Chrome(executable_path="/Users/user3/python/selenium/chromedriver")
browser.get("https://www.zhihu.com/#signin")
browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[1]/div/form/div[1]/div[2]').click()
browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[1]/div/form/div[2]/div/label/input').send_keys("15208961314")
browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[1]/div/form/div[3]/div/label/input').send_keys("15208961314")
browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[1]/div/form/button').click()
设置延迟
代码是同步执行的,有可能页面没加载完,模拟输入的代码就会开始执行,那么我们使用time包下的sleep方法就可以规避这种现象发生。
一般设置5秒就差不多
加载页面代码
time.sleep(5)
模拟输入和登陆代码
模拟鼠标向下滚动
browser.execute_script("window.scrollTo(0,document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage")
案例
from selenium import webdriver
from scrapy.selector import Selector
import time
browser = webdriver.Chrome(executable_path="/Users/user3/python/selenium/chromedriver")
browser.get("https://www.oschina.net/blog")
time.sleep(8)
for i in range(3):
browser.execute_script("window.scrollTo(0,document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage")
time.sleep(3)
设置不加载图片
不加载图片可以让爬取数据变得快,因为图片是网页加载慢的元凶之一
from selenium import webdriver
#核心配置代码
chrome_opt = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images": 2}
chrome_opt.add_experimental_option("prefs", prefs)
browser = webdriver.Chrome(executable_path="/Users/user3/python/selenium/chromedriver", chrome_options=chrome_opt)
browser.get("https://www.taobao.com")
无界面的浏览器
phantomjs,轻量级浏览器,但是它并不是很稳定,尤其在多进程方面表现逊色一些
下载地址:https://phantomjs.org/download.html 下载指定系统的phantomjs驱动包
关于爬取微博
微博有一个开放平台是允许开发者进行数据爬取的,https://open.weibo.com/ 所以有的网站提供相关服务了,我们也就不需要花时间去爬它