1、selenium+phantomjs
selenium是什麽?
是一个浏览器自动化测试工具,自动化就是通过代码操作浏览器,让浏览器自动的做一些操作,是python的第三方库,需要安装才能使用
pip install selenium
谷歌驱动下载地址
http://chromedriver.storage.googleapis.com/index.html
驱动和浏览器版本关系映射表
http://blog.csdn.net/huilan_same/article/details/51896672
selenium 操作谷歌浏览器
需要有一个谷歌浏览器的驱动,然后操作这个驱动
from selenium import webdriver
import time
# 根据webdriver里面的类去创建一个谷歌浏览器对象
path = r'C:\Users\ZBLi\Desktop\1805\day06\ziliao\chromedriver.exe'
browser = webdriver.Chrome(path)
# 再往下,操作浏览器就是操作对象
# 打开百度
url = 'http://www.baidu.com/'
browser.get(url)
time.sleep(2)
# 查找百度输入框
my_input = browser.find_element_by_id('kw')
# 写内容
my_input.send_keys('清纯美女')
time.sleep(2)
# 查找按钮框
button = browser.find_element_by_id('su')
button.click()
time.sleep(3)
# 查找阳光美女链接
href = browser.find_elements_by_xpath('//div[@class="op-img-covers-divide-high"][2]/a[2]')[0]
href.click()
time.sleep(3)
# 推出浏览器
browser.quit()
find_element_by_id 根据id找固定的节点
find_elements_by_name 根据name找节点
find_elements_by_xpath 根据xpath查找
find_elements_by_tag_name 根据标签名查找
find_elements_by_class_name 根据类名查找
find_elements_by_css_selector 根据选择器查找
find_elements_by_link_text 根据链接内容查找
作用在哪?
让selenium操作的是phantomjs
phantomjs是什麽?
就是一款浏览器,无界面的浏览器,具有浏览器的功能,html\css\js这些文件浏览器可以直接执行。
我们关注的就是phantomjs可以执行js文件的功能,在爬取网站的时候,经常碰见动态加载数据的过程。js DOM,解决方法两种
(1)抓接口,拿出来接口发送请求,解析即可
(2)让浏览器直接执行js,然后我要执行js之后的网页代码,selenium+phantomjs,终极解决方案,大招,缺点:发请求之后要有停顿
操作phantomjs
from selenium import webdriver
import time
path = r'C:\Users\ZBLi\Desktop\1805\day06\ziliao\phantomjs-2.1.1-windows\bin\phantomjs.exe'
browser = webdriver.PhantomJS(path)
browser.get('http://www.baidu.com/')
time.sleep(3)
# 拍照片,记录走到哪了
browser.save_screenshot(r'tupian\baidu1.png')
browser.find_element_by_id('kw').send_keys('美女')
time.sleep(2)
browser.find_element_by_id('su').click()
time.sleep(3)
browser.save_screenshot(r'tupian\baidu2.png')
browser.quit()
代码中模拟滚动条滚动到底部
js = 'document.body.scrollTop=10000'
browser.execute_script(js)
from selenium import webdriver
import time
path = r'C:\Users\ZBLi\Desktop\1805\day06\ziliao\phantomjs-2.1.1-windows\bin\phantomjs.exe'
browser = webdriver.PhantomJS(path)
url = 'https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action='
browser.get(url)
time.sleep(3)
browser.save_screenshot(r'tupian\douban1.png')
# 执行一句js代码即可
# for x in range(1, 6):
# js = 'document.body.scrollTop=10000'
# browser.execute_script(js)
# time.sleep(3)
# browser.save_screenshot(r'tupian\douban2.png')
js = 'document.body.scrollTop=10000'
browser.execute_script(js)
time.sleep(3)
# 获取执行js之后的网页代码
with open(r'tupian\douban.html', 'w', encoding='utf8') as fp:
fp.write(browser.page_source)
# 往下就可以通过bs或者xpath来解析网页内容了
# 模拟点击加载更多,就是通过browser找到那个按钮,让按钮执行click方法即可
browser.quit()
获取页面的执行js之后的代码
browser.page_source
2、Headless Chrome
是什麽?
无头的谷歌浏览器-无界面的谷歌浏览器,phantomjs现在已经没人维护了,
要求:windows(60+以上)、linux(59+以上)
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
path = r'C:\Users\ZBLi\Desktop\1805\day06\ziliao\chromedriver.exe'
browser = webdriver.Chrome(executable_path=path, chrome_options=chrome_options)
browser.get('http://www.baidu.com/')
time.sleep(2)
browser.save_screenshot(r'tupian\baidu3.png')
browser.quit()
- 当然:不仅谷歌有无界面模式,火狐也有,ie也有,phantomjs
网友评论