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信息

Python3爬虫(十三) 爬取动态页之Selenium的更多相关文章

  1. 【Python3爬虫】爬取美女图新姿势--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

  2. python3 爬虫之爬取安居客二手房资讯(第一版)

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author;Tsukasa import requests from bs4 import Beau ...

  3. Python3爬虫之爬取某一路径的所有html文件

    要离线下载易百教程网站中的所有关于Python的教程,需要将Python教程的首页作为种子url:http://www.yiibai.com/python/,然后按照广度优先(广度优先,使用队列:深度 ...

  4. python3爬虫应用--爬取网易云音乐(两种办法)

    一.需求 好久没有碰爬虫了,竟不知道从何入手.偶然看到一篇知乎的评论(https://www.zhihu.com/question/20799742/answer/99491808),一时兴起就也照葫 ...

  5. 爬取动态网页:Selenium

    参考:http://blog.csdn.net/wgyscsf/article/details/53454910 概述 在爬虫过程中,一般情况下都是直接解析html源码进行分析解析即可.但是,有一种情 ...

  6. 爬虫(GET)——爬取多页的html

    工具:python3 目标:将编写的代码封装,不同函数完成不同功能,爬取任意页数的html 新学语法:with open as 除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常. # ...

  7. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  8. 多线程爬虫爬取详情页HTML

    注意:如果想爬取详情页的信息请按须添加方法 import requests import os import re import threading from lxml import etree #爬 ...

  9. 第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息

    第三百三十四节,web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息 crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多 ...

随机推荐

  1. Dynamics CRM 之团队模板

    位置:设置——安全性——访问团队模板 实体:关联实体,若关联了实体,相关关联的角色可以对当前实体进行下列访问权限的操作: 团队模板的赋值: 插件代码 //通过团队模板名称获取团队模板 var team ...

  2. #学习笔记#e2e学习使用(二)

    前言: <#学习笔记#e2e学习使用(一)>主要记录了Vue项目的创建到e2e环境的搭建,以及期间遇到的各种问题和解决方法.本文建立在基础测试环境搭建完毕能正确运行的情况下,编写测试代码, ...

  3. 批量生成DDL脚本

    获取用户下所有索引脚本,用于数据迁移后重建索引: set pagesize 0set long 90000set feedback offset echo offspool get_index_ddl ...

  4. ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件

    当出现访问类的函数或者需要确定类大小的时候,才需要用头文件(使用其类定义)    http://blog.csdn.net/clever101/article/details/4751717 看到这个 ...

  5. Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上

    这个系列的前两篇文章,我们已经把我们的应用成功地在Docker里通过nginx运行了起来,并且用dockerfile里制作好了一个镜像. Docker入门系列之一:在一个Docker容器里运行指定的w ...

  6. python:正则模块

    1,正则表达式 正则表达式是用来做字符串的匹配的,正则有他自己的规则,和python没有关系,一种匹配字符串的规则. 2,字符组 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表 ...

  7. jmeter报"msg":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported"的解决方法

    1.报"msg":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supporte ...

  8. spring异常+自定义以及使用

    1.首先自定义异常 DataException: package com.wbg.maven1128.exception; public class DataException extends Exc ...

  9. HBuilder实现WiFi调试Android

    要求手机是开发模式 wifi实现 条件:已ROOT手机.手机和电脑需要在一个网段 第一步:安装在应用商店下载WiFi ADB (注意这里显示的ip等下使用) 第二步:打开WIFI ADB 第三步:切换 ...

  10. UML 类关系图(泛化,实现,依赖,关联(聚合,组合))

    UML的构造快包含3种:  (1) 事物(4种):结构事物,行为事物,分组事物,注释事物 (2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系 (3) 图(10种):用例图,类图,对象图,包图 ...