1. selenium爬虫

1.1 selenium概述

1】定义1.1) 开源的Web自动化测试工具【2】用途2.1) 对Web系统进行功能性测试,版本迭代时避免重复劳动2.2) 兼容性测试(测试web程序在不同操作系统和不同浏览器中是否运行正常)2.3) 对web系统进行大数量测试【3】特点3.1) 可根据指令操控浏览器3.2) 只是工具,必须与第三方浏览器结合使用【4】安装4.1) Linux: sudo pip3 install selenium4.2) Windows: python -m pip install selenium

1.2 PhantomJS概述

phantomjs为无界面浏览器(又称无头浏览器),在内存中进行页面加载,高效

1.3 环境安装

  • 环境安装

    1】环境说明('以下三种环境任意安装其中一种即可')环境一:selenium + PhantomJS环境二:selenium + chromedriver + Chrome ('我们安装此版本')环境三:selenium + geckodriver + Firefox【2】提前下载驱动2.1) chromedriver : 下载对应版本http://npm.taobao.org/mirrors/chromedriver/2.2) geckodriverhttps://github.com/mozilla/geckodriver/releases   2.3) phantomjshttps://phantomjs.org/download.html【3】添加到系统环境变量2.1) windows: 将解压后的可执行文件拷贝到Python安装目录的Scripts目录中windows查看python安装目录(cmd命令行):where python2.2) Linux :  将解压后的文件拷贝到/usr/bin目录中sudo cp chromedriver /usr/bin/3】Linux中需要修改权限sudo chmod 777 /usr/bin/chromedriver【4】验证4.1) Ubuntu | Windowsfrom selenium import webdriverwebdriver.Chrome()webdriver.Firefox()4.2) Macfrom selenium import webdriverwebdriver.Chrome(executable_path='/Users/xxx/chromedriver')webdriver.Firefox(executable_path='/User/xxx/geckodriver')
    

2. selenium详解

2.1 代码演示

"""示例代码一:使用 selenium+浏览器 打开百度"""# 导入seleinum的webdriver接口
from selenium import webdriver
import time# 创建浏览器对象
driver = webdriver.Chrome()
driver.get('http://www.baidu.com/')
# 5秒钟后关闭浏览器
time.sleep(5)
driver.quit()
"""示例代码二:打开百度,搜索赵丽颖,点击搜索,查看"""from selenium import webdriver
import time# 1.创建浏览器对象 - 已经打开了浏览器
driver = webdriver.Chrome()
# 2.输入: http://www.baidu.com/
driver.get('http://www.baidu.com/')
# 3.找到搜索框,向这个节点发送文字: 赵丽颖
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('赵丽颖')
# 4.找到 百度一下 按钮,点击一下
driver.find_element_by_xpath('//*[@id="su"]').click()

2.2 浏览器对象方法

1】driver.get(url=url)   - 地址栏输入url地址并确认
【2】driver.quit()         - 关闭浏览器
【3】driver.close()        - 关闭当前页
【4】driver.page_source    - HTML结构源码
【5】driver.page_source.find('字符串')从html源码中搜索指定字符串,没有找到返回:-1,经常用于判断是否为最后一页
【6】driver.maximize_window() - 浏览器窗口最大化

2.3 定位节点

1】单元素查找('结果为1个节点对象')1.1) 【最常用】driver.find_element_by_id('id属性值')1.2) 【最常用】driver.find_element_by_name('name属性值')1.3) 【最常用】driver.find_element_by_class_name('class属性值')1.4) 【最万能】driver.find_element_by_xpath('xpath表达式')1.5) 【匹配a节点时常用】driver.find_element_by_link_text('链接文本')1.6) 【匹配a节点时常用】driver.find_element_by_partical_link_text('部分链接文本')1.7) 【最没用】driver.find_element_by_tag_name('标记名称')1.8) 【较常用】driver.find_element_by_css_selector('css表达式')2】多元素查找('结果为[节点对象列表]')2.1) driver.find_elements_by_id('id属性值')2.2) driver.find_elements_by_name('name属性值')2.3) driver.find_elements_by_class_name('class属性值')2.4) driver.find_elements_by_xpath('xpath表达式')2.5) driver.find_elements_by_link_text('链接文本')2.6) driver.find_elements_by_partical_link_text('部分链接文本')2.7) driver.find_elements_by_tag_name('标记名称')2.8) driver.find_elements_by_css_selector('css表达式')

2.4 节点对象操作

1】node.send_keys('')  - 向文本框发送内容
【2】node.click()      - 点击
【3】node.get_attribute('属性名')  -  获取节点的属性值
【4】node.text  -  获取当前节点及子节点和后代节点的文本内容

2.5 猫眼电影爬虫

"""
抓取猫眼电影top100的 电影名称、主演、上映时间
URL地址:https://maoyan.com/board/4
"""
from selenium import webdriver
import timeurl = 'https://maoyan.com/board/4'
driver = webdriver.Chrome()
driver.get(url)def get_data():# 基准xpath: [<selenium xxx li at xxx>,<selenium xxx li at>]li_list = driver.find_elements_by_xpath('//*[@id="app"]/div/div/div[1]/dl/dd')for li in li_list:item = {}# info_list: ['1', '霸王别姬', '主演:张国荣', '上映时间:1993-01-01', '9.5']info_list = li.text.split('\n')item['number'] = info_list[0]item['name'] = info_list[1]item['star'] = info_list[2]item['time'] = info_list[3]item['score'] = info_list[4]print(item)while True:get_data()try:driver.find_element_by_link_text('下一页').click()time.sleep(2)except Exception as e:print('恭喜你!抓取结束')driver.quit()break

3. selenium高级

3.1 设置无界面模式

from selenium import webdriveroptions = webdriver.ChromeOptions()
# 添加无界面参数
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)

3.2 鼠标操作

"""
鼠标操作三步走:
1、创建鼠标事件类对象
2、指定鼠标行为
3、执行
"""
from selenium import webdriver
# 导入鼠标事件类
from selenium.webdriver import ActionChainsdriver = webdriver.Chrome()
driver.get('http://www.baidu.com/')# 移动到 设置,perform()是真正执行操作,必须有
element = driver.find_element_by_xpath('//*[@id="u1"]/a[8]')
ActionChains(driver).move_to_element(element).perform()# 单击,弹出的Ajax元素,根据链接节点的文本内容查找
driver.find_element_by_link_text('高级搜索').click()

3.3 切换页面

  • 适用网站+应对方案

    1】适用网站类型页面中点开链接出现新的窗口,但是浏览器对象driver还是之前页面的对象,需要切换到不同的窗口进行操作【2】应对方案 - driver.switch_to.window()# 获取当前所有句柄(窗口)- [handle1,handle2]all_handles = driver.window_handles# 切换browser到新的窗口,获取新窗口的对象driver.switch_to.window(all_handles[1])
    
  • 民政部网站案例-selenium

    """
    适用selenium+Chrome抓取民政部行政区划代码
    http://www.mca.gov.cn/article/sj/xzqh/2019/
    """
    from selenium import webdriverclass GovSpider(object):def __init__(self):# 设置无界面options = webdriver.ChromeOptions()options.add_argument('--headless')# 添加参数self.driver = webdriver.Chrome(options=options)self.one_url = 'http://www.mca.gov.cn/article/sj/xzqh/2019/'def get_incr_url(self):self.driver.get(self.one_url)# 提取最新链接节点对象并点击self.driver.find_element_by_xpath('//td[@class="arlisttd"]/a[contains(@title,"代码")]').click()# 切换句柄all_handlers = self.driver.window_handlesself.driver.switch_to.window(all_handlers[1])self.get_data()def get_data(self):tr_list = self.driver.find_elements_by_xpath('//tr[@height="19"]')for tr in tr_list:code = tr.find_element_by_xpath('./td[2]').text.strip()name = tr.find_element_by_xpath('./td[3]').text.strip()print(name,code)def run(self):self.get_incr_url()self.driver.quit()if __name__ == '__main__':spider = GovSpider()spider.run()
    

3.4 切换frame

  • 特点+方法

    1】特点网页中嵌套了网页,先切换到iframe,然后再执行其他操作【2】处理步骤2.1) 切换到要处理的Frame2.2) 在Frame中定位页面元素并进行操作2.3) 返回当前处理的Frame的上一级页面或主页面【3】常用方法3.1) 切换到frame  -  driver.switch_to.frame(frame节点对象)3.2) 返回上一级   -  driver.switch_to.parent_frame()3.3) 返回主页面   -  driver.switch_to.default_content()4】使用说明4.1) 方法一: 默认支持id和name属性值 : switch_to.frame(id属性值|name属性值)4.2) 方法二:a> 先找到frame节点 : frame_node = driver.find_element_by_xpath('xxxx')b> 在切换到frame   : driver.switch_to.frame(frame_node)
    
  • 示例1 - 登录豆瓣网

    """
    登录豆瓣网
    """
    from selenium import webdriver
    import time# 打开豆瓣官网
    driver = webdriver.Chrome()
    driver.get('https://www.douban.com/')# 切换到iframe子页面
    login_frame = driver.find_element_by_xpath('//*[@id="anony-reg-new"]/div/div[1]/iframe')
    driver.switch_to.frame(login_frame)# 密码登录 + 用户名 + 密码 + 登录豆瓣
    driver.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]').click()
    driver.find_element_by_xpath('//*[@id="username"]').send_keys('自己的用户名')
    driver.find_element_by_xpath('//*[@id="password"]').send_keys('自己的密码')
    driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[5]/a').click()
    time.sleep(3)# 点击我的豆瓣
    driver.find_element_by_xpath('//*[@id="db-nav-sns"]/div/div/div[3]/ul/li[2]/a').click()
    

3.5 selenium总结

  • selenium+phantomjs|chrome|firefox小总结

    1】设置无界面模式options = webdriver.ChromeOptions()options.add_argument('--headless')driver = webdriver.Chrome(excutable_path='/home/tarena/chromedriver',options=options)2】browser执行JS脚本driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')3】鼠标操作from selenium.webdriver import ActionChainsActionChains(driver).move_to_element('node').perform()4】切换句柄 - switch_to.frame(handle)all_handles = driver.window_handlesdriver.switch_to.window(all_handles[1])5】iframe子页面driver.switch_to.frame(frame_node)
    
  • lxml中的xpath 和 selenium中的xpath的区别

    1】lxml中的xpath用法 - 推荐自己手写div_list = p.xpath('//div[@class="abc"]/div')item = {}for div in div_list:item['name'] = div.xpath('.//a/@href')[0]item['likes'] = div.xpath('.//a/text()')[0]2】selenium中的xpath用法 - 推荐copy - copy xpathdiv_list = browser.find_elements_by_xpath('//div[@class="abc"]/div')item = {}for div in div_list:item['name'] = div.find_element_by_xpath('.//a').get_attribute('href')item['likes'] = div.find_element_by_xpath('.//a').text
    

selenium 爬虫相关推荐

  1. 用Selenium 爬虫下载文件,解除Chrome 下载警告 (Keep or Discard),设置下载目录的方法

    写在前面的话 我们的描述,运用都是基于Ubuntu 的运行环境 Chrome : Version 77.0.3865.90 (Official Build) (64-bit) OS : Ubuntu ...

  2. __init__在python中的用法知乎_python使用selenium爬虫知乎的方法示例

    说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文档中的标签和内容.但是这样有个问题就是,容易被反扒机制所拦住. ...

  3. python selenium爬虫代码示例_python3通过selenium爬虫获取到dj商品的实例代码

    先给大家介绍下python3 selenium使用 其实这个就相当于模拟人的点击事件来连续的访问浏览器.如果你玩过王者荣耀的话在2016年一月份的版本里面就有一个bug. 安卓手机下载一个按键精灵就可 ...

  4. Python爬虫之selenium爬虫,模拟浏览器爬取天猫信息

    由于工作需要,需要提取到天猫400个指定商品页面中指定的信息,于是有了这个爬虫.这是一个使用 selenium 爬取天猫商品信息的爬虫,虽然功能单一,但是也算是 selenium 爬虫的基本用法了. ...

  5. 如何隐藏 Selenium 爬虫?

    点击上方蓝色小字,关注"涛哥聊Python" 重磅干货,第一时间送达 作者 | kingname 来源 | 未闻Code 在昨天的公众号文章<别去送死了,Selenium 爬 ...

  6. python selenium爬虫

    python selenium爬虫 1 前言 博主是一名经管研究生,以自身经历为例.如今大学生写论文大部分都需要数据支撑来论证研究结果,数据除了从数据库直接下载外,有些是需要通过网络爬虫来获得.网络爬 ...

  7. Python Selenium爬虫实战应用

    本节讲解 Python Selenium 爬虫实战案例,通过对实战案例的讲解让您进一步认识 Selenium 框架. 实战案例目标:抓取京东商城(https://www.jd.com/)商品名称.商品 ...

  8. 【selenium爬虫】用selenium自动化爬虫爬取海贼王动漫图片

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途,转载请说明出处,谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/art ...

  9. python selenium爬虫实例_python使用selenium爬虫知乎的方法示例

    说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文档中的标签和内容.但是这样有个问题就是,容易被反扒机制所拦住. ...

  10. Linux 服务器配置selenium 爬虫

    Linux 服务器配置使用代理 IP 的selenium 爬虫 ​ 在 Linux 服务器运行爬虫有时可以取得奇效,但在 Linux 服务器环境(即无图形化界面)下配置爬虫环境.代理 IP 与常见的 ...

最新文章

  1. 深入浅析nginx部署及简单优化
  2. 今天痛下决心,把开发人员的外网给断了,不断是不好管了,人心散了队伍就不好带...
  3. uniapp 强制刷新DOM/强制更新指令:this.$forceUpdate();
  4. B. Complete the Word (尺取法)
  5. SAP HANA如何在存储过程中使用自定义的table type
  6. mysql连接查询(内联)_MySQL之连接查询
  7. php函数、类和对象以及类的封装、继承、类的静态方法、静态属性
  8. 用单片机蜂鸣器播放音乐
  9. CCF 2022:DPU评测技术白皮书发布【附白皮书下载】
  10. android 安装p12证书,如何在Android中使用p12证书(客户端证书)
  11. 服务器非80端口无法访问网页,使用非80网站访问服务器web提示需要备案呢?
  12. IDEA社区版详细安装2022最新版(保姆式)
  13. 线下活动报名|增长骇客:如何利用数据「玩」出新意
  14. Mac桌面文件怎么恢复?
  15. ubuntu16.04 安装为知笔记
  16. GAMES101复习:光线追踪(Ray Tracing)
  17. 准确率,召回率,mAP,ROC,AUC,特异性,敏感性,假阴性,假阳性
  18. LVGL开发指导手册
  19. 用WinDbg分析电脑蓝屏文件
  20. 鼠标滑过图片抖动晃动效果(css/Shake)

热门文章

  1. C# PDF操作之-PDF转EXCEL
  2. android下配置偏好信息的管理
  3. Flutter主流状态管理框架provider、bloc、redux对比
  4. JM、H.264中一些参数的设置和含义
  5. Android默认系统声音/大小修改及配置
  6. PHP 冒泡排序
  7. Misc Buu wp 1
  8. 陶渊明诗文中几种常见的意象
  9. jdk8 forEach循环
  10. 移动端测试-高级手势TouchAction-笔记