爬虫(三)通过Selenium + Headless Chrome爬取动态网页

匿名 (未验证) 提交于 2019-12-02 22:51:30

一、Selenium

Selenium是一个用于Web应用程序测试的工具,它可以在各种浏览器中运行,包括Chrome,Safari,Firefox 等主流界面式浏览器。

我们可以直接用pip install selenium来进行安装。

中文翻译文档:https://selenium-python-zh.readthedocs.io/en/latest/index.html

官方文档:https://selenium-python.readthedocs.io/

二、Headless Chrome

Headless Chrome是Chrome浏览器提供的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。相比于出道较早的 PhantomJS,SlimerJS 等,Headless Chrome 则更加贴近浏览器环境。

我们可以在http://chromedriver.chromium.org/(此网站需要翻墙)或者http://chromedriver.storage.googleapis.com/index.html下载对应Chrome浏览器版本的chrome driver。

需要注意的是mac和linux环境要求chrome版本是59+,而windows版本的chrome要求是60+。下载成后把chromedriver.exe复制到Python安装路径下的Scripts目录中。

更详细的资料可以查看Headless Chrome官方文档

三、使用Selenium + Headless Chrome

实例一:初步使用

from selenium import webdriver  chrome_options = webdriver.ChromeOptions() #设置无界面模式 chrome_options.add_argument("--headless") #禁用gpu chrome_options.add_argument("--disable-gpu") driver = webdriver.Chrome(chrome_options=chrome_options) driver.get('https://www.baidu.com/') print('打开浏览器') print(driver.title) driver.find_element_by_id('kw').send_keys('测试') print('关闭') driver.quit() print('测试完成')

实例二:模拟在淘宝上搜索

from selenium import webdriver  chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") browser = webdriver.Chrome(options=chrome_options)  browser.get("http://www.taobao.com") input_str = browser.find_element_by_id('q') #在搜索栏输入字符 input_str.send_keys("衬衣") #等待一秒 browser.implicitly_wait(1) #清空搜索栏 input_str.clear() input_str.send_keys("裤子") #寻找搜索按钮 button = browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button') button.click() #退出 browser.quit()

实例三:爬取包含Ajax的动态网页数据

from selenium import webdriver  chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") driver = webdriver.Chrome(chrome_options=chrome_options) driver.get("http://pythonscraping.com/pages/javascript/ajaxDemo.html") # driver.page_source driver.implicitly_wait(3) print(driver.find_element_by_id("content").text) driver.close()

注意driver.quit()是退出驱动并关闭所有窗口,而driver.close()是关闭当前窗口。当只有一个窗口时,两者结果是一样的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!