Python3爬虫(十三) 爬取动态页之Selenium
Infi-chu:
http://www.cnblogs.com/Infi-chu/
Python提供了很多模拟浏览器运行的库,比如:Selenium、Splash等
1.常用的引用
from selenium import webdriver from selenium.webdriver.commom.by import By from selenium.webdriver.commom.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait
2.常用声明浏览器对象
browser = webdriver.Chrome() browser = webdriver.Firefox() browser = webdriver.Edge() browser = webdriver.PhantomJS() browser = webdriver.Safari()
3.访问页面
使用get()方法
from selenium import webdriver browser = webdriver.Chrome() browser.get('http://www.baidu.com') print(browser.page_source) browser.close()
4.查找节点
单个节点
find_element_by_name() # 根据name值获取 find_element_by_id() # 根据id值获取 find_element_by_xpath() find_element_by_link_text() find_element_by_partial_link_text() find_element_by_tag_name() find_element_by_class_name() find_element_by_css_selector() # 根据css选择 # 另外一种写法 find_element(By.ID,id)等价于find_element_by_id(id)
多个节点
使用find_elements()方法
find_elements_by_name() # 根据name值获取 find_elements_by_id() # 根据id值获取 find_elements_by_xpath() find_elements_by_link_text() find_elements_by_partial_link_text() find_elements_by_tag_name() find_elements_by_class_name() find_elements_by_css_selector() # 根据css选择
5.节点交互
所谓节点交互,可以理解成为你让浏览器去执行一些动作,比如在输入框输入文字、点击提交按钮等。
输入文字时使用send_keys()方法
清空文字时使用clear()方法
点击按钮时使用click()方法
6.动作链
动作链是扩展版本的节点交互,节点交互是一瞬间的动作,而动作链是持续性的动作,比如:拖动某个图片等
# 鼠标拖拽 from selenium import webdriver from selenium.webdriver import ActionChains browser = webdriver.Chrome() url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable' browser.get(url) browser.switch_to.frame('iframeResult') source = brower.find_element_by_css_selector('#draggable') target = brower.find_element_by_css_selector('#draggable') actions = ActionChains(brower) actions.drag_and_drop(source,target) # drag_and_drop()方法指定区间 actions.perform() # perform()方法让动作执行
7.执行JavaScript
使用execute_script()方法,参数是JavaScript语法
8.获取节点信息
获取属性
使用get_attribute()方法获得属性,前提需选中该节点
获取文本值
通过text属性获得,前提需要选中该节点
获取id、位置、标签和大小
使用id属性可以获得id
使用location属性可以获得location
使用tag_name属性可以获得tag_name
使用size属性可以获得size
9.延时等待
隐式等待
当查找节点时,节点并没有立即出现,则等待一段时间再查找DOM,默认时间时0
显式等待
指定要查找的节点,并指定最长等待时间,如果在此时间段内加载出来该节点,则返回查找结果;否则抛出异常
等待条件及含义
等待条件 含义 title_js 标题是某一内容 title_contains 标题包含某内容 presence_of_element_located 节点加载出来,传入定位元组,如(By.ID,'p') visibility_of_element_located 节点可见,传入定位元祖 visibility_of 可见,传入节点对象 presence_of_all_element_located 所有节点加载完成 text_to_be_present_in_element 某个节点文本包含某文字 text_to_be_present_in_element_value 某个节点值包含文字 frame_to_be_available_and_switch_to_it 加载并切换 invisibility_of_element_located 节点不可见 element_to_be_clickable 节点可点击 staleness_of 判断一个节点是否仍在DOM,可判断页面是否已经刷新 element_to_be_selected 节点可选择,传节点对象 element_located_to_be_selected 节点可选择,传入元组对象 element_selection_state_to_be 传入节点对象以及状态,相等返回True,否则False element_located_selection_state_to_be 传入定位元组及状态,相等返回True,否则False alert_is_present 是否出现警告
10.前进、后退
back()方法为后退
forward()方法为前进
11.cookies操作
get_cookies()方法获得cookies信息
add_cookies()方法添加cookies信息
delete.all_cookies()方法删除所有cookies信息