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. Shell脚本统计文件行数

    Shell脚本统计文件行数 转自 http://www.jb51.net/article/61943.htm    示例:row_count.sh文件 awk '{print NR}' row_cou ...

  2. 一、C语言调试—— gdb 的使用

    1.1 gdb 调试工具常用命令 list:展开调试的源代码,缩写 l: break:设置断点,缩写为 b: info break:查看断点信息,缩写为 i b delete:删除断点 print:打 ...

  3. Exp5 MSF基础应用 20164314

    一.实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.一个主动攻击实践,如ms08_067; (成功) 2.一个针对浏览器的攻击,如ms1 ...

  4. Ubuntu 18.04 记录

    登录后死机,关机时死机的解决方法 更新内核并安装 Nvidia 显卡驱动可解决. 在内核更新为 4.15.18,Nvidia 显卡驱动为 390 时,问题解决. 使用 LiveCD 启动,然后 mou ...

  5. Ubuntu通过ADB连接手机

    参考 ubuntu14.04 下android studio连接手机 安装 adb $sudo apt install adb $sudo lsusb 得到ID为 Bus Device : ID 12 ...

  6. Android O广播接收情况

    target-261.卸载和清除收据(这两个在例外广播列表中) 可以收到广播2.应用商店升级app 收不到android.intent.action.PACKAGE_REPLACED广播,应用自身可以 ...

  7. 分布式系列十三: nginx

    nginx偏运维, 不过作为开发应该了解它能做什么事情, 其作为技术架构的一部分必不可少 正向代理和反向代理 正向代理是代理的客户端, 反向代理是代理的服务端. nginx就是一款可以作反向代理的we ...

  8. python知识点

    if __name__ == 'main' 一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行. 因此if __name ...

  9. 项目Alpha冲刺(团队)-代码规范、冲刺任务与计划

    课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:SkyReach 作业目标:确定团队项目的代码规范.冲刺任务与计划 代码规范:隐流 ...

  10. VGA、DVI、HDMI三种视频信号接口

    目前,电脑显示器常见的接口主要有HDMI.DP.DVI.VGA等4种接口.显示器数据线性能排名:DP>HDMI>DVI>VGA.其中 
VGA是模拟信号,已经被主流所淘汰,DVI.H ...