python 爬虫之selenium可视化爬虫的实现

之所以把selenium爬虫称之为可视化爬虫

主要是相较于前面所提到的几种网页解析的爬虫方式

selenium爬虫主要是模拟人的点击操作

selenium驱动浏览器并进行操作的过程是可以观察到的

就类似于你在看着别人在帮你操纵你的电脑,类似于别人远程使用你的电脑

当然了,selenium也有无界面模式

快速入门

selenium基本介绍:

selenium 是一套完整的web应用程序测试系统,

包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)
和测试的并行处理(Selenium Grid)。

Selenium的核心Selenium Core基于JsUnit,
完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。
selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,

爬虫中主要用来解决JavaScript渲染问题。

用python写爬虫的时候,主要用的是selenium的Webdriver,

#安装selenium库
pip install selenium
#安装对应浏览器驱动
# 我们可以通过下面的方式先看看Selenium.Webdriver支持哪些浏览器
from selenium import webdriver
print(help(webdriver))
适用浏览器:
PACKAGE CONTENTS
  android (package)  blackberry (package)  chrome (package)
  common (package)   edge (package)     firefox (package)
  ie (package)     opera (package)     phantomjs (package)
  remote (package)   safari (package)    support (package)  webkitgtk (package)
#这里要说一下比较重要的PhantomJS,
#PhantomJS是一个而基于WebKit的服务端JavaScript API,
#支持Web而不需要浏览器支持,
#其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。
#PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试

谷歌浏览器驱动下载地址
注意对应版本号,chrome地址栏输入chrome://version/ 查看自己的Chrome版本
我使用的是anaconda 下载好后丢入anaconda3\Scripts文件夹下就可以了
如果是其他ide如:pycharm、VScode但加载的还是anaconda的集成python,依然可以这么操作

简单测试

from selenium import webdriver
# #声明浏览器对象
browser1 = webdriver.Chrome()
browser2 = webdriver.Firefox()
# #访问页面
browser1.get("http://www.baidu.com")
print(browser1.page_source)
#关闭当前窗口
browser1.close()

元素定位

要想对页面进行操作,首先要做的是选中页面元素,
比较常见的八种元素定位方式,如下表

定位一个元素 定位多个元素 定位方式描述
find_element_by_id find_elements_by_id 通过元素 id进行定位
find_element_by_name find_elements_by_name 通过元素 名称进行定位
find_element_by_xpath find_elements_by_xpath 通过xpath路径进行定位
find_element_by_link_text find_elements_by_link_text 通过完整超链接文本进行定位
find_element_by_partial_link_text find_elements_by_partial_link_text 通过部分超链接文本进行定位
find_element_by_tag_name find_elements_by_tag_name 通过标记名称进行定位
find_element_by_class_name find_elements_by_class_name 通过类名称进行定位
find_element_by_css_selector find_elements_by_css_selector 通过css选择器进行定位

更详细定位方式可以参考:《史上最全!Selenium元素定位的30种方式》

页面操作

1.表单填充

# 找到用户名输入用户名
user = drive.find_element_by_name("LoginForm[username]")
user.send_keys(username)
# 找到密码输入密码
pwd=drive.find_element_by_id("LoginForm_password")
pwd.send_keys(password)
# 点击登录按钮实现登录
drive.find_element_by_class_name("login_btn").click()

2.窗口句柄

简单讲,句柄就是浏览器上方每一个窗口栏的唯一标识

#获取当前窗口所有句柄
handles = drive.window_handles
#通过句柄 切换到第2个标签页
drive.switch_to.window(handles[2])
"""操作完成"""
#关闭当前窗口
driver.close()
#通过句柄 切换到第1个标签页
drive.switch_to.window(handles[0])
time.sleep(random.uniform(2,3))

3.url加载和获取

#url加载
drive.get(url)
# 获取当前页面url并断言
currentPageUrl = driver.current_url

4.cookie处理

  • get_cookies:获取cookie信息
  • add_cookie:添加cookie信息
drive.get("http://www.baidu.com")
cookie = {'name':'foo','value':'bar'}
drive.add_cookie(cookie)
drive.get_cookies()

等待方式

现在很多网站采用 Ajax技术
无法确定网页元素什么时候能被完全加载
所以网页元素的选取比较困难
此时就需要设置等待(等待网页加载完成)

selenium有两种等待方式:

  • 显式等待
  • 隐式等待

1.显式等待
显式等待是一种条件触发式等待
直到设置的某一条件达成时才会继续执行
可以设置超时时间,如果超过超时时间元素依然没被加载,就会抛出异常

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
drive = webdriver.Chrome()
url = 'http://www.baidu.com/'
drive.get(url)

try:
	WebDriverWait(self.driver,10).until(EC.presence_of_element_located(By.ID,"LoginForm[username]")) #显示等待
except:
 print('%s页面未找到元素'% loc)

以上代码加载 'http://www.baidu.com/'页面
并定位id为"LoginForm[username]"的元素
设置超时时间10秒,webDriverWait默认会500ms检测一下元素是否存在

selenium提供了一些内置的用于显示等待的方法,
位于expected_conditions类中,详细见下表

内置方法 功能
title_is 判断当前页面的title是否等于预期内容
title_contains 判断当前页面的title是否包含预期字符串
presence_of_element_located 判断某个元素是否被加到了dom树里,
并不代表该元素一定可见
presence_of_all_element_located 判断是否至少有1个元素存在于dom树里
visibility_of_element_located 判断某个元素是否可见
visibility_of 判断某个元素是否可见
invisibility_of_element_located 判断某个元素是否不存在于dom树里或不可见
text_to_be_present_in_element 判断元素中的text是否包含了预期的字符串
text_to_be_present_in_element_value 判断元素中的value属性是否包含了预期字符
frame_to_be_available_and_switch_to_it 判断该frame是否可以切换进去,如果可以,
返回True并切换进去,否则返回False
element_to_be_clickable 判断某个元素是否可见并且是enable的
staleness_of 等待某个元素从dom树中移除
element_to_be_selected 判断某个元素是否被选中了,一般用于下拉列表
element_located_to_be_selected 判断某个元素是否被选中了,一般用于下拉列表
element_selection_state_to_be 判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be 判断某个元素的选中状态是否符合预期
alert_is_present 判断页面上是否存在alert框

2.隐式等待

隐式等待是在尝试定位某个元素时,如果没能立刻发现,就等待固定时长
类似于socket超时,默认设置是0秒,即相当于最长等待时长

在浏览器界面直观感受是:
等待直到网页加载完成(地址栏这个地方不是× 变成如下)时继续执行,
网页加载超过设置等待时长才报错

使用方法

from selenium import webdriver
drive = webdriver.Chrome()
url = 'http://www.baidu.com/'
#设置最大等待时长 10秒
drive.implicitly_wait(10)
drive.get(url)
user = drive.find_element_by_name("LoginForm[username]")

3.线程休眠
time.sleep(time)是比较常用的线程休眠方式
为了避免风险,我个人比较喜欢随机休眠
time.sleep(random.uniform(4,5))

扩展程序加载

# 设置好应用扩展
chrome_options.add_extension(extension_path)
#添加下载路径
#download.default_directory:设置下载路径  profile.default_content_settings.popups:设置为 0 禁止弹出窗口
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory':tmp_path}
chrome_options.add_experimental_option('prefs', prefs)

到此这篇关于python 爬虫之selenium可视化爬虫的实现的文章就介绍到这了,更多相关selenium可视化爬虫内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python selenium爬虫实现定时任务过程解析

    现在需要启动一个selenium的爬虫,使用火狐驱动+多线程,大家都明白的,现在电脑管家显示CPU占用率20%,启动selenium后不停的开启浏览器+多线程, 好,没过5分钟,CPU占用率直接拉到90%+,电脑卡到飞起,定时程序虽然还在运行,但是已经类似于待机状态, 是不是突然感觉到面对电脑卡死,第一反应:卧槽,这个lj电脑,这么程序都跑不起来,我还写这么多代码,*****!! 是吧,接下来上代码,具体功能,请自信查阅相关资料深造: from datetime import datetime

  • 详解Selenium+PhantomJS+python简单实现爬虫的功能

    Selenium 一.简介 selenium是一个用于Web应用自动化程序测试的工具,测试直接运行在浏览器中,就像真正的用户在操作一样 selenium2支持通过驱动真实浏览器(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver) selenium2支持通过驱动无界面浏览器(HtmlUnit,PhantomJs) 二.安装 Windows 第一种方法是:下载源码安装,下载地址(https://pypi.python.org/py

  • python网络爬虫 Scrapy中selenium用法详解

    引入 在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值.但是通过观察我们会发现,通过浏览器进行url请求发送则会加载出对应的动态加载出的数据.那么如果我们想要在scrapy也获取动态加载出的数据,则必须使用selenium创建浏览器对象,然后通过该浏览器对象进行请求发送,获取动态加载的数据值. 1.案例分析: - 需求:爬取网易新闻的国内.国际.军事.无人机板块下的新闻数据

  • python爬虫系列Selenium定向爬取虎扑篮球图片详解

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员还是写个程序来进行吧! 所以我通过Python+Selenium+正则表达式+urllib2进行海量图片爬取. 运行效果: http://photo.hupu.com/nba/tag/马刺 http://photo.hupu.com/nba/tag/陈露 源代码: # -*- coding: utf

  • selenium+python设置爬虫代理IP的方法

    1. 背景 在使用selenium浏览器渲染技术,爬取网站信息时,一般来说,速度是很慢的.而且一般需要用到这种技术爬取的网站,反爬技术都比较厉害,对IP的访问频率应该有相当的限制.所以,如果想提升selenium抓取数据的速度,可以从两个方面出发: 第一,提高抓取频率,出现验证信息时进行破解,一般是验证码或者用户登录. 第二,使用多线程 + 代理IP, 这种方式,需要电脑有足够的内存和充足稳定的代理IP . 2. 为chrome设置代理IP from selenium import webdri

  • 利用selenium爬虫抓取数据的基础教程

    写在前面 本来这篇文章该几个月前写的,后来忙着忙着就给忘记了. ps:事多有时候反倒会耽误事. 几个月前,记得群里一朋友说想用selenium去爬数据,关于爬数据,一般是模拟访问某些固定网站,将自己关注的信息进行爬取,然后再将爬出的数据进行处理. 他的需求是将文章直接导入到富文本编辑器去发布,其实这也是爬虫中的一种. 其实这也并不难,就是UI自动化的过程,下面让我们开始吧. 准备工具/原料 1.java语言 2.IDEA开发工具 3.jdk1.8 4.selenium-server-standa

  • python爬虫开发之selenium模块详细使用方法与实例全解

    python爬虫模块selenium简介 selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题. 模拟浏览器进行网页加载,当requests,urllib无法正常获取网页内容的时候 一.声明浏览器对象 注意点一,Python文件名或者包名不要命名为selenium,会导致无法导入 from selenium import webdriver #webdriver可以认为是浏览器的驱动器,要驱动浏览器必须用到webdriver,支持多种浏览器,这里

  • python爬虫selenium和phantomJs使用方法解析

    1.selenum:三方库.可以实现让浏览器完成自动化的操作. 2.环境搭建 2.1 安装: pip install selenium 2.2 获取浏览器的驱动程序 下载地址: http://chromedriver.storage.googleapis.com/index.html http://npm.taobao.org/mirrors/chromedriver/ 浏览器版本和驱动版本的对应关系表: chromedriver版本 支持的Chrome版本 v2.46 v71-73 v2.45

  • Python3爬虫中Selenium的用法详解

    Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击.下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬.对于一些JavaScript动态渲染的页面来说,此种抓取方式非常有效.本节中,就让我们来感受一下它的强大之处吧. 1. 准备工作 本节以Chrome为例来讲解Selenium的用法.在开始之前,请确保已经正确安装好了Chrome浏览器并配置好了ChromeDriver.另外,还需要正确安装好Python的Selenium库,详细的安装和配置过程

  • python利用selenium进行浏览器爬虫

    前言 相信大家刚开始在做爬虫的时候,是不是requests和sound这两个库来使用,这样确实有助于我们学习爬虫的知识点,下面来介绍一个算事较复杂的爬虫案例selenium进形打开浏览器爬取网站的信息 导入第三方库 自执行函数 解析信息 保存文件信息 打开浏览器 获取链接信息 执行函数 运行结果 总结 以上所述是小编给大家介绍的python利用selenium进行浏览器爬虫,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持! 如果你觉得本

随机推荐