selenium

selenium是什么?

是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作

环境搭建

.安装: pip install selenium

.获取对应的驱动:以谷歌为例
2.1.查看谷歌浏览器帮助中的关于Google Chrome 查看版本 .2映射表地址:
# 查看对应的驱动
http://blog.csdn.net/huilan_same/article/details/51896672 .3谷歌浏览器驱动下载地址:
# 根据映射表下载对应驱动
http://chromedriver.storage.googleapis.com/index.html
使用简介

导包

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

使用

driver = webdriver.Chrome(r'F:\Python\视屏\10爬虫\chromedriver_win32\chromedriver.exe')
driver.get('http://www.baidu.com')
input_tag = driver.find_element_by_id('kw') # 找到id=kw 的input标签
assert '百度一下' in driver.title # 页面标题
print(driver.title) # 打印当前页面的标题title
input_tag.send_keys('python') # input框输入值'python'
input_tag.send_keys(Keys.ENTER) # 按回车
print(driver.current_url) # 当前页面的url
print(driver.page_source) # 当前页面的response
print(browser.get_cookies()) # 当前页面的浏览器本地cookie
# driver.close() # 关闭浏览器

select下拉菜单选择

# dirver = Chrome(r'F:\Python\视屏\10爬虫\chromedriver_win32\chromedriver.exe')
# dirver.get('http://www.cma.gov.cn/')
# print(dirver.page_source)
# select_tag = Select(dirver.find_element(By.NAME, 'province')) # 获取下拉菜单标签
# select_tag.select_by_index() # 索引选择
# select_tag.select_by_value('河北') # 按照下拉框的值选择
# select_tag.select_by_visible_text('河北') # 按照下拉框可视化文本选择
# select_tag.deselect_all() # 取消选中所有值

行为链

# 行为链
driver = webdriver.Chrome(r'F:\Python\视屏\10爬虫\chromedriver_win32\chromedriver.exe')
driver.get('http://www.baidu.com') input_tag = driver.find_element_by_id('kw') # 找到id=kw 的input标签
submit_tag = driver.find_element_by_id('su') # 找到id=su 的submit提交标签 actions = ActionChains(driver) # 浏览器驱动传进去实例化一个行为链对象
actions.move_to_element(input_tag) #移动到输入框上
actions.send_keys_to_element(input_tag, 'python') # 给输入框输入python
actions.move_to_element(submit_tag) # 移动到提交元素上
actions.click(submit_tag) # 点击提交元素
actions.perform() # 执行行为链

cookie操作

driver = webdriver.Chrome(r'F:\Python\视屏\10爬虫\chromedriver_win32\chromedriver.exe')
driver.get('http://www.baidu.com')
[print(cookie) for cookie in driver.get_cookies()] # 获取所有浏览器上的cookie并展示
[driver.delete_cookie(cookie['domain']) for cookie in driver.get_cookies()] # 删除所有的cookie
driver.delete_all_cookies() # 删除浏览器上当前页面的所有cookie

等待

1. 隐式等待

driver = webdriver.Chrome(r'F:\Python\视屏\10爬虫\chromedriver_win32\chromedriver.exe')
driver.get('http://www.baidu.com') # driver.implicitly_wait() # 在找元素的时候等待10秒 如果找不到再报错 input_tag = driver.find_element_by_id('')
input_tag.send_keys('python') # input框输入值'python'

2. 显式等待

driver = webdriver.Chrome(r'F:\Python\视屏\10爬虫\chromedriver_win32\chromedriver.exe')
driver.get('http://www.baidu.com')
try:
WebDriverWait(driver, ).until(
EC.presence_of_element_located((By.ID, 'somename'))
) # 等待10s 一直等待 id='somename'的标签出现。 如果没有再报错。
finally:
driver.quit()

js代码执行和窗口切换

driver = webdriver.Chrome(r'F:\Python\视屏\10爬虫\chromedriver_win32\chromedriver.exe')
driver.get('http://www.baidu.com') driver.execute_script('window.open("http://www.cma.gov.cn/")') # 执行js代码
print(driver.current_url) # https://www.baidu.com/ driver.switch_to_window(driver.window_handles[]) # 类似于列表操作
print(driver.current_url) # http://www.cma.gov.cn/

ip代理

driver = webdriver.Chrome(r'F:\Python\视屏\10爬虫\chromedriver_win32\chromedriver.exe')
options = webdriver.ChromeOptions() # 是指谷歌浏览器的选项信息
ip = 'http://125.123.136.226:9999' # 代理ip
options.add_argument(f"--proxy-server={ip}") # 使用代理ip
driver.get('http://httpbin.org/ip')

注意:如果是Anaconda3的jupyter的情况,不能直接下载到本地的cpython解释器  要在Anaconda3\Scripts中指定下载

示例:先运行下看下结果

from time import sleep
from selenium import webdriver # 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
driver = webdriver.Chrome(r'F:\Python\10爬虫\包\chromedriver_win32\chromedriver.exe') # 用get打开百度页面
driver.get("http://www.baidu.com")
# 查找页面的“设置”选项,并进行点击
driver.find_elements_by_link_text('设置')[].click()
sleep()
# # 打开设置后找到“搜索设置”选项,设置为每页显示50条
driver.find_elements_by_link_text('搜索设置')[].click()
sleep() # 选中每页显示50条
m = driver.find_element_by_id('nr')
sleep()
m.find_element_by_xpath('//*[@id="nr"]/option[3]').click()
m.find_element_by_xpath('.//option[3]').click()
sleep() # 点击保存设置
driver.find_elements_by_class_name("prefpanelgo")[].click()
sleep() # 处理弹出的警告页面 确定accept() 和 取消dismiss()
driver.switch_to_alert().accept()
sleep()
# 找到百度的输入框,并输入 美女
driver.find_element_by_id('kw').send_keys('美女')
sleep()
# 点击搜索按钮
driver.find_element_by_id('su').click()
sleep()
# 在打开的页面中找到“Selenium - 开源中国社区”,并打开这个页面
driver.find_elements_by_link_text('美女_百度图片')[].click()
sleep() # 关闭浏览器
driver.quit()

代码介绍:

#导包
from selenium import webdriver
#创建浏览器对象,通过该对象可以操作浏览器
browser = webdriver.Chrome('驱动路径')
#使用浏览器发起指定请求
browser.get(url) #使用下面的方法,查找指定的元素进行操作即可
find_element_by_id 根据id找节点
find_elements_by_name 根据name找
find_elements_by_xpath 根据xpath查找
find_elements_by_tag_name 根据标签名找
find_elements_by_class_name 根据class名字查找

phantomJs

PhantomJS是一款无界面的浏览器,其自动化操作流程和上述操作谷歌浏览器是一致的。由于是无界面的,为了能够展示自动化操作流程,PhantomJS为用户提供了一个截屏的功能,使用save_screenshot函数实现。

示例:

from time import sleep
from selenium import webdriver # 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
driver = webdriver.Chrome(r'F:\Python\10爬虫\包\chromedriver_win32\chromedriver.exe') # 用get打开百度页面
driver.get("http://www.baidu.com")
# 查找页面的“设置”选项,并进行点击
driver.find_elements_by_link_text('设置')[].click()
sleep()
# # 打开设置后找到“搜索设置”选项,设置为每页显示50条
driver.find_elements_by_link_text('搜索设置')[].click()
sleep() # 选中每页显示50条
m = driver.find_element_by_id('nr')
sleep()
m.find_element_by_xpath('//*[@id="nr"]/option[3]').click()
m.find_element_by_xpath('.//option[3]').click()
sleep() # 点击保存设置
driver.find_elements_by_class_name("prefpanelgo")[].click()
sleep() # 处理弹出的警告页面 确定accept() 和 取消dismiss()
driver.switch_to_alert().accept()
sleep()
# 找到百度的输入框,并输入 美女
driver.find_element_by_id('kw').send_keys('美女')
sleep()
# 点击搜索按钮
driver.find_element_by_id('su').click()
sleep()
# 在打开的页面中找到“Selenium - 开源中国社区”,并打开这个页面
driver.find_elements_by_link_text('美女_百度图片')[].click()
sleep() # 关闭浏览器
driver.quit()

谷歌无界面使用

# selenium 对 无头谷歌 的调用

#########################################################
#固定格式
from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
######################################################### path = r'F:\Python\视屏\10爬虫\包\chromedriver_win32\chromedriver.exe'
bro = webdriver.Chrome(executable_path=path,chrome_options=chrome_options) # 此时 属于无界面的调用谷歌浏览器 # 请求的发送
bro.get(url='https://www.baidu.com') #根据find系列的函数定位到指定的标签
baidu_input = bro.find_element_by_id('kw') baidu_input.send_keys('python') # 百度搜索框输入 python
time.sleep(0.5) bro.find_element_by_id('su').click() # 找到百度一下
time.sleep()
response = bro.find_element_by_xpath('//*[@id="1"]/h3/a[1]').click()
time.sleep() bro.quit()

重点:selenium+phantomjs 就是爬虫终极解决方案:有些网站上的内容信息是通过动态加载js形成的,所以使用普通爬虫程序无法回去动态加载的js内容。例如豆瓣电影中的电影信息是通过下拉操作动态加载更多的电影信息。

 #需求:爬取豆瓣电影动态加载出的电影详情数据

from time import sleep
from selenium import webdriver # 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
driver = webdriver.Chrome(r'F:\Python\视屏\10爬虫\包\chromedriver_win32\chromedriver.exe') url = 'https://movie.douban.com/typerank?type_name=%E7%88%B1%E6%83%85&type=13&interval_id=100:90&action=' # 豆瓣的url driver.get(url=url) # 调用浏览器访问豆瓣 js = 'window.scrollTo(0,document.body.scrollHeight)' # 滚动下拉当前屏幕对应像素的js代码 driver.execute_script(js) # 下拉滚动第一次
sleep() driver.execute_script(js) # 下拉滚动第二次
sleep() driver.execute_script(js) # 下拉滚动第三次
sleep() page_text = driver.page_source # 类似requests.get(url).text
# print(page_text) with open('./douban.html','w',encoding='utf-8') as fp:
fp.write(page_text) bro.quit()

qq空间登录爬取

from time import sleep
from selenium import webdriver
from lxml import etree #登录qq空间
bro = webdriver.Chrome(executable_path=r'F:\Python\视屏\10爬虫\包\chromedriver_win32\chromedriver.exe')
url = 'https://qzone.qq.com/'
#请求的发送
bro.get(url=url)
sleep()
#定位到指定的iframe # 使用的组件嵌套 点位组件
bro.switch_to.frame('login_frame') bro.find_element_by_id('switcher_plogin').click() # 定位切换账号密码登录
sleep() userName = bro.find_element_by_id('u') # 账号输入框
userName.send_keys('qq账号') passWord = bro.find_element_by_id('p') # 密码输入栏
passWord.send_keys('qq密码.')
sleep()
bro.find_element_by_id('login_button').click() # 点击登录
sleep()
js = 'window.scrollTo(0,document.body.scrollHeight)' # 向下滚动的js代码
bro.execute_script(js) # 1次
sleep()
bro.execute_script(js) # 2次
sleep()
bro.execute_script(js) # 3次
sleep()
bro.execute_script(js) # 3次
sleep()
bro.execute_script(js) # 3次
sleep()
page_text = bro.page_source # 获取页面的response.text的内容
print(page_text)
sleep() #解析
tree = etree.HTML(page_text) # DOM数 div_list = tree.xpath('//div[@class="f-info qz_info_cut"] | //div[@class="f-info"]') # 获取 说说 或者其他转发dom节点
for div in div_list:
text = div.xpath('.//text()') # 得到每一个节点的文本内容
text = "".join(text)
print(text) bro.quit()

爬虫之selenium和PhantomJS的更多相关文章

  1. 爬虫工具——Selenium和PhantomJS

    Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏 ...

  2. 针对源代码和检查元素不一致的网页爬虫——利用Selenium、PhantomJS、bs4爬取12306的列车途径站信息

    整个程序的核心难点在于上次豆瓣爬虫针对的是静态网页,源代码和检查元素内容相同:而在12306的查找搜索过程中,其网页发生变化(出现了查找到的数据),这个过程是动态的,使得我们在审查元素中能一一对应看到 ...

  3. 爬虫中Selenium和PhantomJS

    Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上, ...

  4. python爬虫之selenium、phantomJs

    图片懒加载技术 什么是图片懒加载技术 图片懒加载是一种网页优化技术.图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时 ...

  5. Python爬虫系列-Selenium+Chrome/PhantomJS爬取淘宝美食

    1.搜索关键字 利用Selenium驱动浏览器搜索关键字,得到查询后的商品列表 2.分析页码并翻页 得到商品页码数,模拟翻页,得到后续页面的商品列表 3.分析提取商品内容 利用PyQuery分析源码, ...

  6. 【tips】自动化测试工具 - selenium和phantomJS

    ### 目录清单 selenium和phantomjs概述 selenium常用API 案例操作:模拟登陆csdn 1. selenium和phantomJS是什么东西 selenium是一套web网 ...

  7. 爬虫之动态HTML处理(Selenium与PhantomJS )

    Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上, ...

  8. 爬虫 (4)- Selenium与PhantomJS(chromedriver)与爬取案例

    Selenium文档 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器 ...

  9. 爬虫——Selenium与PhantomJS

    Selenium Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同的是Selenium可以直接运行在浏览器上, ...

随机推荐

  1. uCosII中的任务

    任务基本概念 任务是一个接受操作系统管理的独立运行单元,在uCosII中类似与普通平台上的main()函数,需要自己来保护其因调用或中断二产生的断点,所以需要一个自己的私有堆栈,即任务堆栈: 任务有两 ...

  2. IE7下使用兼容Icon-Font CSS类

    Iconfont在IE7下需要使用unicode方式,但是这种方式不太方便,使用以下代码可使IE7像普通用法使用. @font-face {font-family: "anticon&quo ...

  3. P2P互联网金融企业的四大转型方向

    1.按照国标做成百分百的信息中介平台.这个定位太低,无利可图,如果政策导向真按着这个路径走,未来可能只剩下不到50家平台; 2.转型成为带“民营银行”属性的平台.这还得国家网开一面,学习英国模式,允许 ...

  4. Fatal error encountered during command execution

    MySQL + .net + EF 开发环境,调用一处sql语句报错: Fatal error encountered during command execution[sql] view plain ...

  5. kali下的webshell工具-Weevely

    Weevely ------------------------------------------------ 主要特点: ·         隐蔽的类终端的PHP webshell ·       ...

  6. PyCharm的使用教程

    1.1 安装 首先去下载最新的pycharm ,进行安装.可以直接在官网下载. 1.2 首次使用 1,点击Create New Project. 2, 输入项目名.路径.选择python解释器.如果没 ...

  7. reuters-多分类问题

    from keras.datasets import reuters import numpy as np from keras.utils.np_utils import to_categorica ...

  8. @Html.LabelFor 如何直接添加CSS样式

    样式用的是bootstrap. 我想单独调整一下其中一个控件的样式,大概这个造型. @Html.LabelFor(m => m.DerivationRate, new { @class = &q ...

  9. Maven - <Profile>详解

    转载自:https://www.cnblogs.com/wxgblogs/p/6696229.html Profile能让你为一个特殊的环境自定义一个特殊的构建:profile使得不同环境间构建的可移 ...

  10. expect 批量自动部署ssh 免密登陆 之 三

    #!/bin/expect -- ########################################## zhichao.hu #Push the id.pas.pub public k ...