zoukankan      html  css  js  c++  java
  • 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信息

  • 相关阅读:
    MySql 范式
    MySql 多表关系
    MySql 约束条件
    MySql 枚举和集合 详解
    【RoR win32】新建rails项目找不到script/server的解决办法
    【RoR win32】安装RoR
    【RoR win32】提高rails new时bundle install运行速度
    【bs4】安装beautifulsoup
    【py分析网页】可能有用的-re去除网页上的杂碎
    【pyQuery】抓取startup news首页
  • 原文地址:https://www.cnblogs.com/Infi-chu/p/8989589.html
Copyright © 2011-2022 走看看