当前位置: 移动技术网 > IT编程>脚本编程>Python > 爬虫(三)通过Selenium + Headless Chrome爬取动态网页

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

2019年09月20日  | 移动技术网IT编程  | 我要评论

古田县邮编,电子邮箱地址大全,樱町中泉

一、selenium

selenium是一个用于web应用程序测试的工具,它可以在各种浏览器中运行,包括chrome,safari,firefox 等主流界面式浏览器。

 

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

 

中文翻译文档:

官方文档:

二、headless chrome

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

 

我们可以在(此网站需要翻墙)或者下载对应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()是关闭当前窗口。当只有一个窗口时,两者结果是一样的。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网