一 介绍
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行javascript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器 from selenium import webdriver browser=webdriver.Chrome() browser=webdriver.Firefox() browser=webdriver.PhantomJS() browser=webdriver.Safari() browser=webdriver.Edge()
官网:http://selenium-python.readthedocs.io
二 安装
selenium+chromedriver
selenium+phantomjs
三 基本使用
from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys #键盘按键操作 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait #等待页面加载某些元素 browser=webdriver.Chrome() try: browser.get(‘https://www.baidu.com‘) input_tag=browser.find_element_by_id(‘kw‘) input_tag.send_keys(‘美女‘) #python2中输入中文错误,字符串前加个u input_tag.send_keys(Keys.ENTER) #输入回车 wait=WebDriverWait(browser,10) wait.until(EC.presence_of_element_located((By.ID,‘content_left‘))) #等到id为content_left的元素加载完毕,最多等10秒 print(browser.page_source) print(browser.current_url) print(browser.get_cookies()) finally: browser.close()
四 选择器
一 基本用法
View Code
二 xpath
View Code
三 获取标签属性
获取标签属性
五 等待元素被加载
#1、selenium只是模拟浏览器的行为,而浏览器解析页面是需要时间的(执行css,js),一些元素可能需要过一段时间才能加载出来,为了保证能查找到元素,必须等待 #2、等待的方式分两种: 隐式等待:在browser.get(‘xxx‘)前就设置,针对所有元素有效 显式等待:在browser.get(‘xxx‘)之后设置,只针对某个元素有效
隐式等待
显式等待
六 元素交互操作
点击,清空
Action Chains
在交互动作比较难实现的时候可以自己写JS(万能方法)
补充:frame的切换
七 其他
模拟浏览器的前进后退
cookies
选项卡管理
异常处理
八 项目练习
自动登录163邮箱并发送邮件
爬取京东商城商品信息
作业: 爬取亚马逊iphone手机的商品信息 爬取天猫python书籍的商品信息 爬取京东小米手机的商品信息