selenium与爬虫
- 便捷的获取网站中动态加载的数据
- 便捷实现模拟登录
什么是selenium
基于浏览器自动化的一个模块
selenium中文网
selenium使用流程
- 环境的安装
pip install selenium
- 下载一个浏览器的驱动程序 下载网站:ChromeDriver Mirror
- 通过selenium实例化一个浏览器对象
- 编辑基于浏览器自动化的操作代码
- 发起请求: get()
- 标签定位:find系列方法
- 标签交互:send_keys(‘xxx’)
- 执行js程序:excute_script(‘jsCode’)
- 页面前进,后退:forward(),back()
- 关闭浏览器:quit()
具体流程操作
根据chrome浏览器的版本,来选择下载对应的驱动程序
将下载好的chromedriver程序放置到Google文件夹的chrome配置文件夹中
将此地址添加到环境变量当中
打开cmd,输入chromedriver测试是否已经配置成功chrome驱动程序
基础代码:
from selenium import webdriver
# 实例化一个chrome浏览器
chrome_driver = 'C:\Program Files\Google\Chrome\Application\chromedriver.exe'
driver = webdriver.Chrome(executable_path= chrome_driver)
# 让浏览器向指定url发起请求
driver.get('https://www.baidu.com')
效果:
练习:获取页面代码内容
爬取页面:http://scxk.nmpa.gov.cn:81/xk/
from selenium import webdriver
from lxml import etree
from time import sleep
# 实例化一个chrome浏览器
chrome_driver = 'C:\Program Files\Google\Chrome\Application\chromedriver.exe'
driver = webdriver.Chrome(executable_path= chrome_driver)
# 让浏览器向指定url发起请求
driver.get('http://scxk.nmpa.gov.cn:81/xk/')
# 获取浏览器当前页面的页面源码数据
page_text = driver.page_source
# 解析数据
tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@id="gzlist"]/li')
for li in li_list:
name = li.xpath('./dl/@title')[0]
print(name)
sleep(2)
# 关闭实例化浏览器
driver.quit()
效果:
selenium处理iframe
在selenium中,可能会遇到有iframe存在的内嵌页面
页面地址:https://www.runoob.com/try/try.php?filename=tryjs_events
直接选择iframe中的按钮点击按下不会成功,需要切换定位到iframe的作用域当中
核心:iframe = driver.switch_to.frame('iframeResult')
代码:
from selenium import webdriver
chrome_driver = 'C:\Program Files\Google\Chrome\Application\chromedriver.exe'
driver = webdriver.Chrome(executable_path= chrome_driver)
# 让浏览器向指定url发起请求
driver.get('https://www.runoob.com/try/try.php?filename=tryjs_events')
# 如果定位的标签是存在于iframe标签中的,则必须通过如下此操作再进行标签定位
# 定位iframe,切换浏览器标签定位的作用域
iframe = driver.switch_to.frame('iframeResult')
btn = driver.find_element_by_xpath('//body/button[@type="button"]')
btn.click()
print(btn)