Day:006(1) | Python爬虫:高效数据抓取的编程技术(爬虫工具)

news2025/6/21 9:24:15

selenium介绍与安装

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

        Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。

        Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。

PyPI网站下载 Selenium库https://pypi.org/simple/selenium/,也可以用 第三方管理器

Selenium 官方参考文档:https://selenium-python.readthedocs.io/index.html 

安装

pip install selenium

安装Firefox geckodriver 

安装firefox最新版本,添加Firefox可执行程序到系统环境变量。记得关闭firefox的自动更新

firefox下载地下:https://github.com/mozilla/geckodriver/releases

将下载的geckodriver.exe 放到path路径下 D:\Python\python_version\

安装ChromeDriver

http://chromedriver.storage.googleapis.com/index.html

注意
版本号要对应

下载下来的文件解压到 python_version\Scripts 

测试代码

# 导入 webdriver
from selenium import webdriver
# 要想调用键盘按键操作需要引入keys包
from selenium.webdriver.common.keys import Keys
# 调用环境变量指定的PhantomJS浏览器创建浏览器对象
driver = webdriver.Chrome()
# 如果没有在环境变量指定PhantomJS位置
# driver =webdriver.Chrome(executable_path="./phantomjs"))
# get方法会一直等到页面被完全加载,然后才会继续程序,通常测试会在这里选择 time.sleep(2)
driver.get("http://www.baidu.com/")
# 打印网页渲染后的源代码
print(driver.page_source)
# 生成新的页面快照
driver.save_screenshot("python爬虫.png")
# 获取当前url
print(driver.current_url)
# 关闭浏览器
driver.quit()

selenium 控制浏览器

最大化窗口

我们知道调用启动的浏览器不是全屏的,这样不会影响脚本的执行,但是有时候会影响我们“观看”脚本的执行。

browser = webdriver.Chrome()

url= 'http://www.baidu.com'
browser.get(url)

borwser.maximize_window()
 设置宽与高

最大化还是不够灵活,能不能随意的设置浏览的宽、高显示?当然是可以的。

browser = webdriver.Chrome()

url= 'http://www.baidu.com'
browser.get(url)

borwser.set_window_size(500,600)
 浏览器前进、后退

浏览器上有一个后退、前进按钮,对于浏览网页的人是比较方便的;对于做web自动化测试的同学来说应该算是一个比较难模拟的问题
其实很简单,下面看看python的实现方式

browser = webdriver.Chrome()#访问百度首页
first_url= 'http://www.baidu.com
browser.get(first_url)
time.sleep(2)#访问新闻页面
second_url='http://news.baidu.com
browser.get(second_url)
time.sleep(2)#返回(后退)到百度首页print "backto %s "%(first_url)
browser.back()
time.sleep(1)#前进到新闻页print "forward to %s"%(second_url)
browser.forward()
time.sleep(2)
browser.quit()

selenium元素定位

对象的定位应该是自动化的核心,要想操作一个对象,首先应该识别这个对象。

一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪个街道、楼层、6门牌找到这个人。

对象定位

webdriver提供了对象定位方法

  • find_element(type,value)
  • find_elements(type,value)
利用 By 类来确定哪种选择方式 
from selenium.webdriver.common.by import By
chrome.find_element(by=By.ID,value='su')

By 类的一些属性如下 :

  • ID = "id"
  • NAME = "name"
  • XPATH = "xpath"
  • LINK_TEXT = "link text"
  • PARTIAL_LINK_TEXT = "partial link text"
  • TAG_NAME = "tag name"
  • CLASS_NAME = "class name"
  • CSS_SELECTOR = "css selector"
操作元素 

前面讲到了不少知识都是定位元素,定位只是第一步,定位之后需要对这个原素进行操作。

鼠标点击呢还是键盘输入,这要取决于我们定位的是按钮还输入框。

一般来说,webdriver中比较常用的操作对象的方法有下面几个:

  • click 点击对象
  • send_keys 在对象上模拟按键输入
  • clear 清除对象的内容,如果可以的话
from selenium import webdriver
from selenium.webdriver.chrome.service
import Service
from time import sleep
from selenium.webdriver.common.by import By

def test_element():
    # 创建驱动对象
    s =
Service(executable_path='./chromedriver.exe'
)
    # 创建一个浏览器
    driver = webdriver.Chrome(service=s)
    # 打个百度
    driver.get('https://cn.bing.com/')
    sleep(2)
    # 获取 搜索框,并输出“百战”
  
driver.find_element(By.ID,'sb_form_q').send
_keys('百战')
    sleep(1)
    # 获取 搜索按钮,并点击
  
driver.find_element(By.ID,'search_icon').cl
ick()
if __name__ =='__main__':
    test_element()

selenium定位下拉菜单

包含下拉菜单页面

<html>
    <head>
        <meta http-equiv="content-type"
content="text/html;charset=utf-8" />
        <title>Level Locate</title>    
  <script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/jquery@1.1
2.4/dist/jquery.min.js"></script>
        <link
href="https://cdn.jsdelivr.net/npm/@bootcss/
v3.bootcss.com@1.0.9/dist/css/bootstrap.min.
css" rel="stylesheet" />        
    </head>
    <body>
        <h3>Level locate</h3>
        <div class="span3 col-md-3">        
            <div class="well">
                <div class="dropdown">
                    <a class="dropdowntoggle" data-toggle="dropdown"href="#">Link1</a>
                    <ul class="dropdownmenu" role="menu" aria-labelledby="dLabel"
id="dropdown1" >
                        <li><a tabindex="-1"
href="http://www.bjsxt.com">Action</a></li>
                        <li><a tabindex="-1"
href="#">Another action</a></li>
                        <li><a tabindex="-1"
href="#">Something else here</a></li>
                        <li class="divider">
</li>
                        <li><a tabindex="-1"
href="#">Separated link</a></li>
                    </ul>
                </div>                
            </div> 
 </div>
        <div class="span3 col-md-3">        
            <div class="well">
                <div class="dropdown">
                    <a class="dropdowntoggle" data-toggle="dropdown"
href="#">Link2</a>
                    <ul class="dropdownmenu" role="menu" aria-labelledby="dLabel" >
                        <li><a tabindex="-1"
href="#">Action</a></li>
                        <li><a tabindex="-1"
href="#">Another action</a></li>
                        <li><a tabindex="-1"
href="#">Something else here</a></li>
                        <li class="divider">
</li>
                        <li><a tabindex="-1"
href="#">Separated link</a></li>
                    </ul>
                </div>                
            </div>            
        </div>
    </body>
    <scriptsrc="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.9/dist/js/bootstrap.min.js">
</script>
</html>
from selenium import webdriver
11from selenium.webdriver.chrome.service
import Service
from selenium.webdriver.common.by import By
import os
from time import sleep

def test_down_menu():
    # 创建一个驱动
    s = Service(executable_path='./chromedriver.exe')
    # 创建浏览器
    driver = webdriver.Chrome(service=s)
    # 设置方位的文件地址
    file_path ='file:///'+os.path.abspath('./html/test01.html')
    # 访问页面
    driver.get(file_path)
    # 定位父级元素
  
driver.find_element(By.LINK_TEXT,'Link1').click()
    # 找到要移动的位置
    menu =
driver.find_element(By.LINK_TEXT,'Action')
    # 做一个移动光标的动作
    # 定义一个动作在driver移动到     menu的位置     执行动作
  #webdriver.ActionChains(driver).move_to_element(menu).perform()
    # sleep(2)
    # 定位子级元素
    menu.click()
    # 睡眠2秒
    sleep(2)
    # 关闭浏览器
    driver.quit()
if __name__ == '__main__':
    test_down_menu()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea如何debug看springsecurity的过滤器顺序

idea如何debug看springsecurity的过滤器顺序 先配置一个Spring启动对象,后续需要根据这个对象来获取SpringSecurity的过滤器链 设置一个输出信息&#xff0c;需要在输出信息这里打上断点&#xff0c;才方便查看过滤器链 public static void main(String[] args) {//此时不…

[opencv]VideoWriter写出fourcc格式

fourcc支持的格式 fourcc全名Four-Character Codes&#xff0c;四字符代码&#xff0c;该编码由四个字符组成 cv2.VideoWriter_fourcc(O,O,O,O) cv2.VideoWriter_fourcc(*OOOO) 通常写法有上述两种形式&#xff0c;O代表一个字符&#xff0c;通常有 支持avi格式的有&#…

LeetCode 142.环形链表II(数学公式推导)

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整…

C语言中的数据结构--链表的应用1(2)

前言 上一节我们学习了链表的概念以及链表的实现&#xff0c;那么本节我们就来了解一下链表具体有什么用&#xff0c;可以解决哪些实质性的问题&#xff0c;我们借用习题来加强对链表的理解&#xff0c;那么废话不多说&#xff0c;我们正式进入今天的学习 单链表相关经典算法O…

配置及第三方授权申请教程

项目需要配置的地方不多&#xff0c;主要就两个地方需要注意&#xff1a;邮箱授权和第三方授权需要提前申请 1.基本设置 1.1 打开application.yml&#xff0c;修改数据库ip等基本信息 这些基本的配置就不多说了&#xff0c;基本就是改下服务器ip和账号密码什么的 1.2 获取QQ…

WebGIS实现各地区COVID-19数据一览

1.项目地址 GISpjd/WebGIS-Show-Covid19 (github.com)&#xff0c;具体每个文件的职能可以参考README文档。 2.前言 预览 >> 所用技术栈&#xff1a; 项目需求本身不是过于复杂&#xff0c;所以没有在相应前端框架下完成&#xff0c;但转入框架也是比较容易的 &#…

DJ-D500/0.5机械式隔膜计量泵

一、DJ-D500/0.5机械式隔膜计量泵概述&#xff1a;DJ-D500/0.5机械式隔膜计量泵是一款设计精良、结构紧凑的计量设备&#xff0c;专为精确输送和计量各种化学液体而设计。该泵采用先进的机械驱动机制&#xff0c;能够确保在各种工作压力下都能实现高精度的流量控制。 二、技术特…

Transformer模型-数据预处理,训练,推理(预测)的简明介绍

Transformer模型-数据预处理&#xff0c;训练&#xff0c;推理&#xff08;预测&#xff09;的简明介绍 在继续探讨之前&#xff0c;假定已经对各个模块的功能有了充分的了解&#xff1a; 人工智能AI 虚拟现实VR 黑客帝国_Ankie&#xff08;资深技术项目经理&#xff09;的博客…

Vue2创建过程记录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、搭建node二、安装Vue CLI三、搭建新项目四、Elemet安装&#xff08;参照官网步骤[Element官网](https://element.eleme.cn/#/zh-CN/component/installation)&am…

2024年安卓轮播图代码+定时翻页(全网代码最少实现)

2024年安卓轮播图代码定时翻页 asda 这里是Fragment子类的继承如果使用 AppCompatActivity请修改一下很简单的如果又看不懂的话可以访问使用我的gpt&#xff1a;https://0.00000.work/ 免费3.5的 直接吧代码扔给他然后和他说帮忙解释一下每一行作用 Integer[] data{R.drawab…

Nexpose v6.6.245 for Linux Windows - 漏洞扫描

Nexpose v6.6.245 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, Release Apr 03, 2024 请访问原文链接&#xff1a;Nexpose v6.6.245 for Linux & Windows - 漏洞扫描&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&…

JVM字节码与类的加载——class文件结构

文章目录 1、概述1.1、class文件的跨平台性1.2、编译器分类1.3、透过字节码指令看代码细节 2、虚拟机的基石&#xff1a;class文件2.1、字节码指令2.2、解读字节码方式 3、class文件结构3.1、魔数&#xff1a;class文件的标识3.2、class文件版本号3.3、常量池&#xff1a;存放所…

Vue笔记 2

数据代理 数据代理&#xff1a;通过一个对象代理对另一个对象中属性的操作&#xff08;读/写&#xff09; let obj{x:100} let obj2{y:200} Object.defineProperty(obj2,x,{get(){return obj.x},set(value){obj.x value} })Vue中的数据代理 Vue中的数据代理&#xff1a; 通…

cesium 添加动态波纹效果 圆形扩散效果 波纹材质

一、扩展材质 /*** 水波纹扩散材质* param {*} options* param {String} options.color 颜色* param {Number} options.duration 持续时间 毫秒* param {Number} options.count 波浪数量* param {Number} options.gradient 渐变曲率*/function CircleWaveMaterialProperty(opt…

顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-回铃音补偿

文章目录 前言联系我们解决问题操作步骤 前言 回铃音&#xff1a; 当别人打电话给你时&#xff0c;你的电话响铃了&#xff0c;而他听到的声音叫做回铃音。回铃音是被叫方向主叫方传送&#xff0c;也是彩铃功能的基础。我们平时打电话听到的“嘟 嘟 嘟 嘟”的声音&#xff0c;就…

Golang | Leetcode Golang题解之第20题有效的括号

题目&#xff1a; 题解&#xff1a; func isValid(s string) bool {n : len(s)if n % 2 1 {return false}pairs : map[byte]byte{): (,]: [,}: {,}stack : []byte{}for i : 0; i < n; i {if pairs[s[i]] > 0 {if len(stack) 0 || stack[len(stack)-1] ! pairs[s[i]] {…

白盒测试-条件覆盖

​ 条件覆盖是指运行代码进行测试时&#xff0c;程序中所有判断语句中的条件取值为真值为假的情况都被覆盖到&#xff0c;即每个判断语句的所有条件取真值和假值的情况都至少被经历过一次。 ​ 条件覆盖率的计算方法为&#xff1a;测试时覆盖到的条件语句真、假情况的总数 / 程…

期货学习笔记-MACD指标学习2

MACD底背离把握买入多单的技巧 底背离的概念及特征 底背离指的是MACD指标与价格低点之间的对比关系&#xff0c;这里需要明白的是MACD指标的涨跌动能和价格形态衰竭形态之间的关系&#xff0c;如果市场价格创新低而出现衰竭形态同时也有底背离形态的出现&#xff0c;此时下跌…

2024认证杯数学建模A题思路模型代码

目录 2024认证杯数学建模A题思路模型代码&#xff1a;4.11开赛后第一时间更更新&#xff0c;获取见文末名片 2023年认证杯数学建模 2024年认证杯思路代码获取见此 2024认证杯数学建模A题思路模型代码&#xff1a;4.11开赛后第一时间更更新&#xff0c;获取见文末名片 2023年认…

关于AI发展的3种声音:杨植麟 朱啸虎 王小川

1、杨植麟&#xff1a;技术信仰派 2、朱啸虎&#xff1a;市场信仰派 3、王小川&#xff1a;中间派 References 对话月之暗面杨植麟&#xff1a;向延绵而未知的雪山前进朱啸虎讲了一个中国现实主义AIGC故事王小川想提出中国AGI第三种可能性