python爬虫系列——开始入土(五)

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)

猜你喜欢

转载自blog.csdn.net/qq_36171287/article/details/113811685