Python爬虫应用

一、Python环境

1.1安装环境

双击打开下载好的Python安装包如下界面选择“Customize installation”个性化安装然后“Add Python 3.7 to PATH”暂时不选我们之后手动添加路径感受一下或者你为了省去麻烦可以直接勾选。

点击之后进入子页面“Optional Features”,各个选项都帮我们勾选上了,直接“next 。然后进入“Advanced Options”页面,我们将“Install for all users”勾选上,这时自动勾选了“Precompile standard library”,然后我们再点击“Browse”更改安装位置,开始安装即可。

1.2.配置环境

Windows11系统中搜索编辑系统环境变量

点击环境变量

双击系统变量中的“path”,点击新建增加python路径“D:\Software\soft\Python37”pip路径 “D:\Software\soft\Python37\Scripts”,改为你的安装位置。

3.检查安装情况

使用win+r键输入cmd进入命令提示符(或者win11搜索命令提示符)

输入python显示python的版本号即安装成功

二、安装pip第三方库

2.1安装pip

输入pip3 –version查看pip的版本

若没有则在windows下安装pip 在安装python目录的scirpts下运行easy_install pip进行安装

刚安装完可能需要自身升级:python -m pip install -U pip

2.2安装爬虫所需库

下载seleniumpip install selenium,如果安装总失败可以用国内镜像网站pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

下载Urllibpip install Urllib,如果安装总失败可以用国内镜像网站pip install Urllib-i Simple Index

下载pyautoguipip install pyautogui,如果安装总失败可以用国内镜像网站pip install pyautogui-i Simple Index

三、对于库的解读

3.1对于selenium库的了解

selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE7, 8, 9, 10, 11),Mozilla FirefoxSafariGoogle ChromeOpera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。

3.1.1selenium简介

selenium是一个用于web应用程序自动化测试工具,可以直接运行在浏览器,就行用户真正的在浏览器操作一样,支持的浏览器包括:IEFirefoxChromeSafari

主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。

3.1.2selenium原理(3个)

1.测试脚本:pythonjava编写脚本程序

2.浏览器驱动:不同的驱动对应不同的版本

3.浏览器:IEFirefoxChromeSafari

3.1.3selenium工作过程

1.对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动

2.浏览器驱动中包含了一个HTTP Server,用来接收这些http请求

3.HTTP Server接收到请求后根据请求来具体操控对应的浏览器

4.浏览器执行具体的测试步骤

5.浏览器将步骤执行结果返回给HTTP Server

6.HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息

3.1.4.selenium自动化测试流程

1.分析需求

2.制定测试计划

3.设计用例

4.搭建测试框架(公用对象,公用环境,公用方法,工公用测试数据)

5.编写脚本

6.分析测试结果

7.维护测试脚本

3.1.5UI自动化本质

定位元素–操作元素–模拟页面操作–断言–测试报告

3.1.6UI自动化的前提

1.需求不能频繁动

2.UI稳定

3.项目周期长

4.回归测试频繁

3.1.7适用场景

冒烟测试,回归测试

3.1.8UI自动化的原则

1.一个case完成一个功能测试(可以从功能用例摘除可以自动化的禁行标识)

2.一个脚本是一个完整的业务场景

3.每个脚本可以独立运行,没有依赖关系

4.设计合适的检查点

5.设计良好的框架

3.1.9UI自动化的覆盖率

是根据项目来说,并不是占比越高越好,会受到项目周期,迭代次数等影响

3.1.10selenium优点

1.开源,免费

2.支持多种浏览器IEFirefoxChromeSafari

3.支持多平台 WindowsLinuxMac

4.支持多语言 pythonjavac

5.web支持良好

6.简单,灵活

7.支持分布式测试用例执行

3.1.11selenium定位方式

from selenium import webdriver

driver = driver.chrome()

driver.find_element_by_id()

driver.find_element_by_name()

driver.find_element_by_class_name()

driver.find_element_by_tag_name()

driver.find_element_by_link_text()

driver.find_element_by_xpth()

driver.find_element_by_css_selector()

3.1.12框架设计:

我们来思考下框架组成部分:

1)需要配置文件管理

2)业务逻辑代码和测试脚本分离

3)报告和日志文件输出

4)自定义的库的封装

5)管理、执行脚本方式

6)第三方插件引入

7)持续集成

解释:

  我们需要一个配置文件去控制一些,环境信息,开关,配置文件可以是txt/xml/yaml/properties/ini,一般.properties使用较多在JAVA里,本文是Python系列,我可能会选择ini文件。

   业务逻辑代码和测试脚本分离,不像我们刚开始学习Selenium那样,代码和脚本在一个类文件里演示。我们根本没有用到代码重构,复用。代码和用例文件分离后,更加清晰,去多人开发脚本,方便调试。

   报告和日志文件输出,你执行了多少casecase结果如何,这都需要报告来展示,一般采用第三方插件来实现这个功能,好多报告格式是html,简单,明了的风格。日志输出也很重要,如果发生报错,脚本执行失败,通过日志快速定位发生问题位置。

  用户自定义库,这个很好理解,我们很多功能需要重复调用,这样我们就写成一个公用方法,放到工具包下,每次方便调用,例如浏览器引擎类和basepage.py的封装。

  管理和执行脚本的方式,例如Python中单元测试框架unittest使用率非常高。

  第三方插件,有时候,我们一些功能,需要借助第三方插件,能够更好实现,例如AutoIT,来实现文件上传和下载。还有利用第三方报告插件生成基于html格式的测试报告。

  持续集成,git,svn,ant,mavenjenkins,我们会把这整合到jenkins,达到持续集成,一键执行测试脚本。

结论:
配置元件:配置文件与全局环境变量
框架的主要代码:日志类,封装,调用,配置文件读取
产品业务:核心思想,页面对象,业务逻辑分层
测试脚本集合:管理和创建业务测试单元
日志和报告:报告输出
测试集成和其他:Jenkins集成或者其他

3.2Urllib3

Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3。Urllib3提供了很多python标准库里所没有的重要特性:

1、线程安全

2、连接池

3、客户端SSL/TLS验证

4、文件分部编码上传

5、协助处理重复请求和HTTP重定位

6、支持压缩编码

7、支持HTTPSOCKS代理

8100%测试覆盖率

3.3 PyAutoGUI

PyAutoGUI是一个纯PythonGUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,利用它可以实现自动化任务。让所有GUI都自动化,本教程译自大神Al SweigartPyAutoGUI项目,Python自动化工具,更适合处理GUI任务,网页任务推荐。PyAutoGUI可以模拟鼠标的移动、点击、拖拽,键盘按键输入、按住操作,以及鼠标+键盘的热键同时按住等操作,可以说手能动的都可以。

3.3.1常用操作

我们在pyautogui库中常常使用的方法,如下

import pyautogui

pyautogui.PAUSE = 1 # 调用在执行动作后暂停的秒数,只能在执行一些pyautogui动作后才能使用,建议用time.sleep

pyautogui.FAILSAFE = True # 启用自动防故障功能,左上角的坐标为(00),将鼠标移到屏幕的左上角,来抛出failSafeException异常

# 判断(x,y)是否在屏幕上

x, y = 122, 244

pyautogui.onScreen(x, y) # 结果为true

width, height = pyautogui.size() # 屏幕的宽度和高度

print(width, height)

3.3.2鼠标操作

我们在pyautogui库对于鼠标的使用方法大体如下

import pyautogui

currentMouseX, currentMouseY = pyautogui.position() # 鼠标当前位置

print(currentMouseX, currentMouseY)

# 控制鼠标移动,duration为持续时间

for i in range(2):

  pyautogui.moveTo(100, 100, duration=0.25) # 移动到 (100,100)

  pyautogui.moveTo(200, 100, duration=0.25)

  pyautogui.moveTo(200, 200, duration=0.25)

  pyautogui.moveTo(100, 200, duration=0.25)

for i in range(2):

  pyautogui.moveRel(50, 0, duration=0.25) # 从当前位置右移100像素

  pyautogui.moveRel(0, 50, duration=0.25) # 向下

  pyautogui.moveRel(-50, 0, duration=0.25) # 向左

  pyautogui.moveRel(0, -50, duration=0.25) # 向上

# 按住鼠标左键,把鼠标拖拽到(100, 200)位置

pyautogui.dragTo(100, 200, button='left')

# 按住鼠标左键,用2秒钟把鼠标拖拽到(300, 400)位置

pyautogui.dragTo(300, 400, 2, button='left')

# 按住鼠标左键,用0.2秒钟把鼠标向上拖拽

pyautogui.dragRel(0, -60, duration=0.2)

# pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')

# 其中,button属性可以设置成leftmiddleright

pyautogui.click(10, 20, 2, 0.25, button='left')

pyautogui.click(x=100, y=200, duration=2) # 先移动到(100, 200)再单击

pyautogui.click() # 鼠标当前位置点击一下

pyautogui.doubleClick() # 鼠标当前位置左击两下

pyautogui.doubleClick(x=100, y=150, button="left") # 鼠标在(100150)位置左击两下

pyautogui.tripleClick() # 鼠标当前位置左击三下

pyautogui.mouseDown() # 鼠标左键按下再松开

pyautogui.mouseUp()

pyautogui.mouseDown(button='right') # 按下鼠标右键

pyautogui.mouseUp(button='right', x=100, y=200) # 移动到(100, 200)位置,然后松开鼠标右键

# scroll函数控制鼠标滚轮的滚动,amount_to_scroll参数表示滚动的格数。正数则页面向上滚动,负数则向下滚动

# pyautogui.scroll(clicks=amount_to_scroll, x=moveToX, y=moveToY)

pyautogui.scroll(5, 20, 2)

pyautogui.scroll(10) # 向上滚动10

pyautogui.scroll(-10) # 向下滚动10

pyautogui.scroll(10, x=100, y=100) # 移动到(100, 100)位置再向上滚动10

# 缓动/渐变函数可以改变光标移动过程的速度和方向。通常鼠标是匀速直线运动,这就是线性缓动/渐变函数。

# PyAutoGUI30种缓动/渐变函数,可以通过pyautogui.ease*?查看。

# 开始很慢,不断加速

pyautogui.moveTo(100, 100, 2, pyautogui.easeInQuad)

# 开始很快,不断减速

pyautogui.moveTo(100, 100, 2, pyautogui.easeOutQuad)

# 开始和结束都快,中间比较慢

pyautogui.moveTo(100, 100, 2, pyautogui.easeInOutQuad)

# 一步一徘徊前进

pyautogui.moveTo(100, 100, 2, pyautogui.easeInBounce)

# 徘徊幅度更大,甚至超过起点和终点

pyautogui.moveTo(100, 100, 2, pyautogui.easeInElastic)

对于我们要获取鼠标在屏幕中的位置,我们可以采用如下代码:

# 案例获取鼠标的位置,方便复制我们定位的鼠标坐标点到代码中

import pyautogui

import time

 获取鼠标位置

def get_mouse_positon():

  time.sleep(5) # 准备时间

  print('开始获取鼠标位置')

  try:

    for i in range(10):

      # Get and print the mouse coordinates.

      x, y = pyautogui.position()

      positionStr = '鼠标坐标点(X,Y)为:{},{}'.format(str(x).rjust(4), str(y).rjust(4))

      pix = pyautogui.screenshot().getpixel((x, y)) # 获取鼠标所在屏幕点的RGB颜色

      positionStr += ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(

        3) + ')'

      print(positionStr)

      time.sleep(0.5) # 停顿时间

  except:

    print('获取鼠标位置失败')

if __name__ == "__main__":

  get_mouse_positon()

也可以使用pyautogui库帮助文档的方法,不过本人认为使用上面的方法,更加便利。pyautogui库帮助文档的获取鼠标位置的方法如下:

import pyautogui

print('Press Ctrl-C to quit.')

try:

  while True:

    # Get and print the mouse coordinates.

    x, y = pyautogui.position()

    positionStr = 'X:' + str(x).rjust(4) + ' Y:' + str(y).rjust(4)

    pix = pyautogui.screenshot().getpixel((x, y)) # 获取鼠标所在屏幕点的RGB颜色

    positionStr += ' RGB:(' + str(pix[0]).rjust(3) + ',' + str(pix[1]).rjust(3) + ',' + str(pix[2]).rjust(3) + ')'

    print(positionStr, end='') # end='' 替换了默认的换行

    print('\b' * len(positionStr), end='', flush=True) # 连续退格键并刷新,删除之前打印的坐标,就像直接更新坐标效果

except KeyboardInterrupt: # 处理 Ctrl-C 按键

  print('\nDone.')

3.3.4键盘操作

我们在pyautogui库对于键盘的使用方法大体如下

import pyautogui

pyautogui.typewrite('Hello world!') # 输入Hello world!字符串

pyautogui.typewrite('Hello world!', interval=0.25) # 每次输入间隔0.25秒,输入Hello world!

pyautogui.press('enter') # 按下并松开(轻敲)回车键

pyautogui.press(['left', 'left', 'left', 'left']) # 按下并松开(轻敲)四下左方向键

pyautogui.keyDown('shift') # 按下`shift`

pyautogui.keyUp('shift') # 松开`shift`

pyautogui.keyDown('shift')

pyautogui.press('4')

pyautogui.keyUp('shift') # 输出 $ 符号的按键

pyautogui.hotkey('ctrl', 'v') # 组合按键(Ctrl+V),粘贴功能,按下并松开'ctrl''v'按键

# pyautogui.KEYBOARD_KEYS数组中就是press()keyDown()keyUp()hotkey()函数可以输入的按键名称

pyautogui.KEYBOARD_KEYS = ['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.',

              '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@',

              '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',

              'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',

              'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback',

              'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch',

              'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal',

              'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',

              'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22',

              'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul',

              'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2',

              'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack',

              'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9',

              'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print',

              'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select',

              'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab',

              'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command',

              'option', 'optionleft', 'optionright']

3.3.5弹窗操作

我们在pyautogui库对于弹出窗口的使用方法大体如下:

import pyautogui

# 显示一个简单的带文字和OK按钮的消息弹窗。用户点击后返回button的文字。

pyautogui.alert(text='', title='', button='OK')

b = pyautogui.alert(text='要开始程序么?', title='请求框', button='OK')

print(b) # 输出结果为OK

# 显示一个简单的带文字、OKCancel按钮的消息弹窗,用户点击后返回被点击button的文字,支持自定义数字、文字的列表。

pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel']) # OKCancel按钮的消息弹窗

pyautogui.confirm(text='', title='', buttons=range(10)) # 10个按键0-9的消息弹窗

a = pyautogui.confirm(text='', title='', buttons=range(10))

print(a) # 输出结果为你选的数字

# 可以输入的消息弹窗,带OKCancel按钮。用户点击OK按钮返回输入的文字,点击Cancel按钮返回None

pyautogui.prompt(text='', title='', default='')

# 样式同prompt(),用于输入密码,消息用*表示。带OKCancel按钮。用户点击OK按钮返回输入的文字,点击Cancel按钮返回None

pyautogui.password(text='', title='', default='', mask='*')

四、安装浏览器驱动

查看自己浏览器版本号

找寻浏览器对应的版本

安装到python的根目录下

并在此创建一个文件夹存储音乐mp3,将三个文件放入一个文件夹中

五、执行文件

使用

打开游戏的.py文件

点击File->Open ..找到文件的位置

点击Run->Run Module

代码如下:

from selenium import webdriver

from selenium.webdriver.common.by import By

import time

import urllib

import pyautogui as pg

driver = webdriver.Chrome() #创建一个浏览器

driver.get("http://www.5nd.com/") # 打开一个指定的网址

pic=driver.find_elements(By.XPATH,"//a[@class='__playcolor']") #根据class属性查找所有的a链接

#注意这里是find_elements表示查找多个元素

for one in pic:

    name=one.get_attribute("title") #获得查找到的元素的属性值

    one.click() #点击查到到的元素

    time.sleep(2)

    n = driver.window_handles   # 获取当前页句柄

    driver.switch_to.window(n[1])  #切换到新窗口 

    mp3=driver.find_element(By.XPATH,"//audio[@preload='metadata']") #根据preload属性查找audio元素

    #注意这里是find_element表示查找单个元素

    sx=mp3.get_attribute("src") #获得src属性值也就是下载的链接

    urllib.request.urlretrieve(sx,'mp3/%s.mp3'%name)  #下载指定的文件到mp3文件夹下

    pg.hotkey("ctrl","w")  #发送快捷键关闭窗口

    driver.switch_to.window(n[0]) #切换到原窗口 

    time.sleep(0.5)

   

driver.quit() #退出浏览器

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值