文章目录

  • 简答题
    • 总结selenium的特点
    • selenium常用API
      • 元素定位
        • id定位
        • name定位
        • class_name定位
        • tag_name定位
        • link_text定位
        • partial_link_text定位
        • XPath定位
        • CSS定位
      • 元素操作、浏览器操作方法
      • 鼠标和键盘操作
      • 元素等待
        • 显式等待
      • 验证码处理
    • python操作mysql数据库
      • 创建连接
      • 关于游标,执行SQL,查询数据
      • 插入一条数据
      • 添加多条数据
      • 修改、更新数据
      • 删除数据

简答题

总结selenium的特点

  • 开源、免费
  • 跨平台:Linux,windows,MAC, Solaris
  • 支持多浏览器:chrome, IE, firefox, Edge, Oprea
  • 支持多语言:C#, Java, Perl, PHP, Python, Ruby

selenium常用API

元素定位

定位方法:

# selenium 4.x 版本使用:
from selenium.webdriver.common.by import Bydriver.find_element(By.xxx, xxx)

id定位

通过id属性来定位元素

HTML规定id属性在整个HTML文档中必须是唯一的

from selenium.webdriver.common.by import Bydriver.find_element(By.ID, id)

name定位

以name属性定位

HTML文档中name属性值可以重复

from selenium.webdriver.common.by import Bydriver.find_element(By.NAME, name)

class_name定位

根据元素class属性定位

HTML通过使用class来定义元素的样式

from selenium.webdriver.common.by import Bydriver.find_element(By.CLASS_NAME, class_name)

tag_name定位

通过标签名定位

HTML本质是由不同tag组成,每一个tag会在页面中存在多个,所以不方便进行精确定位,一般很少使用

from selenium.webdriver.common.by import Bydriver.find_element(By.TAG_NAME, tag_name)

link_text定位

专门用来定位超链接元素<a>标签</a>,并且是通过超链接的文本内容来定位元素

link_text为超链接的全部文本内容

from selenium.webdriver.common.by import Bydriver.find_element(By.LINK_TEXT, link_text)

partial_link_text定位

对link_text的补充,可以使用局部文本匹配元素

from selenium.webdriver.common.by import Bydriver.find_element(By.PARTIAL_LINK_TEXT, partial_link_text)

XPath定位

  • 路径-定位

    • 绝对路径: /html根结点开始,使用/分隔元素层级(不建议使用)
    • 相对路径: 以 // 开始,//input 或 //*
  • 元素属性-定位
    • //input[@id='属性值'] 或者 //*[@id='属性值']
  • 属性与逻辑结合-定位(多个属性)
    • //*[@name='属性值' and @class='属性值']
  • 层级与属性结合-定位(找父属性)
    • //*[@id='p1']/input
from selenium.webdriver.common.by import Bydriver.find_element(By.XPATH, xpath)

Xpath-延伸

//*[text()="xxx"]   # 文本内容是xxx的元素//*[contains(@attribute, 'xxx')]    # 属性中含有xxx的元素//*[starts-with(@attribute, 'xxx')] # 属性以xxx开头的元素

CSS定位

  • id选择器

    • #id
  • class选择器
    • .class
  • 元素选择器
    • 根据元素的标签名选择
    • element
  • 属性选择器
    • 根据元素的属性名和值选择
    • [attribute=value] 或者 element[attribute=value]
  • 层级选择器
    • 根据元素的父子关系选择
    • element1>element2,element2必须为element1的直接子元素
    • element1 element2,element2为element1的后代元素
from selenium.webdriver.common.by import Bydriver.find_element(By.CSS_SELECTOR, css_selector)

CSS延伸

input[type^='p']    # type属性以p字母开头的元素input[type$='d']    # type属性以d字母结束的元素input[type*='w']    # type属性包含w字母的元素

元素操作、浏览器操作方法

  • 元素常用的操作方法

    • 使用方法:定位元素.方法
    • 例:driver.find_element(By.ID, 'su').click()
click() # 单击元素send_keys(value)    # 模拟输入clear() # 清除文本
  • 操作浏览器的常用方法

    • 使用方法:driver.方法(前提:driver = webdriver.Chrome()
    • 例:driver.maximize_window() # 窗口最大化
maximize_window()                 # 最大化浏览器窗口 --> 模拟浏览器最大化按钮
set_window_size(width, height)    # 设置浏览器窗口大小 --> 设置浏览器宽、高(像素点)
set_window_position(x, y)         # 设置浏览器窗口位置 --> 设置浏览器位置
back()                            # 后退 --> 模拟浏览器后退按钮
forward()                         # 前进 --> 模拟浏览器前进按钮
refresh()                         # 刷新 --> 模拟浏览器F5刷新
close()                           # 关闭当前窗口 --> 模拟点击浏览器关闭按钮
quit()                            # 关闭浏览器驱动对象 --> 关闭所有程序启动的窗口
title                             # 获取页面title
current_url                       # 获取当前页面URL

close()和quit()区别:

  • close():关闭当前主窗口
  • quit():关闭由driver对象启动的所有窗口
    当前只有一个窗口二者没有区别
  • 获取元素信息的常用方法

    • 使用方法:定位元素.方法
    • 例:driver.find_element(By.ID, 'su').get_attribute("id")
size                  # 返回元素大小
text                  # 获取元素的文本
get_attribute("xxx")  # 获取属性值,传递的参数为元素的属性名
is_displayed()        # 判断元素是否可见
is_enabled()          # 判断元素是否可用
is_selected()         # 判断元素是否选中,用来检查复选框或单选按钮是否被选中
  • text和size调用时没有括号
  • get_attribute使用场景:判断一组元素是否为想要的元素或者判断元素属性值是否正确

鼠标和键盘操作

  • 鼠标操作的方法

    • 说明:在Selenium中将操作鼠标的方法封装在ActionChains类中
导包:from selenium.webdriver import ActionChains实例化对象:action = ActionChains(driver)

方法

context_click(element).perform()        # 右击
double_click(element).perform()         # 双击
drag_and_drop(source, target).perform() # 拖动
move_to_element(element).perform()      # 悬停
  • 键盘操作的方法

    • 使用方法:定位元素.send_keys(方法)
    • 例:driver.find_element(By.ID, 'su').send_keys(Keys.BACKSPACE)
导包:from selenium.webdriver import Keys

方法

send_keys(Keys.BACK_SPACE)      # 删除键(BackSpace)
send_keys(Keys.SPACE)           # 空格键(Space)
send_keys(Keys.TAB)             # 制表键(Tab)
send_keys(Keys.ESCAPE)          # 回退键(Esc)
send_keys(Keys.ENTER)           # 回车键(Enter)
send_keys(Keys.CONTROL,'a')     # 全选(Ctrl+A)
send_keys(Keys.CONTROL,'c')     # 复制(Ctrl+C)

元素等待

  • 隐式等待
  • 显式等待

显式等待

针对单个元素生效

定位指定元素时,如果能定位到元素则直接返回该元素,不触发等待;如果不能定位到该元素,则间隔一段时间后再去定位元素;如果达到最大时长还没有找到指定元素,则抛出超时异常TimeoutException

导包 等待类

from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait()

WebDriverWait(driver, timeout, poll_frequency=0.5)- driver:浏览器驱动对象- timeout:超时的时长,单位:秒- poll_frequecy:检测间隔时间,默认为0.5秒

调用方法:until(method):直到。。。时

- method:函数名称,该函数用来实现对元素的定位
- 一般使用匿名函数来实现:- lambda x: x.find_element_by_id("userA")

应用

element = webDriverWait(driver, 10, 1).until(lambda x: x.find_element_by_id("userA"))

验证码处理

cookie跳过登录方法

  • 使用方法:driver.方法
- get_cookie(name)- name:为cookie的名称
- get_cookies() # 获取本网站所有本地cookie
- add_cookie(cookie_dict) # 添加cookie- cookie_dict:一个字典对象,必选的键包括:"name" and "value"

添加cookie后必须使用driver.refresh()刷新方法,否则看不到登录效果

python操作mysql数据库

python操作数据库的过程:
创建连接-获取游标-执行命令-关闭游标-关闭连接

创建连接

python访问 mysql需要用pymysql库

import pymysqldef mysql_db():conn = pymysql.connect(host="127.0.0.1",port=3306,database="spider",charset="utf8",user="root",passwd="root")

关于游标,执行SQL,查询数据

游标需要创建游标还要关闭游标,为防止忘关游标,所以用with

# 打开数据库可能有风险,所以添加异常捕捉
try:with conn.cursor() as cursor:# 准备sql语句sql = "select * from user"cursor.execute(sql)## 执行完SQL语句后的返回结果都是保存到cursor中,所以要从cursor中获取全部数据datas = cursor.fetchall()print("获取的数据:\n", datas)
except Exception as e:print("数据库操作异常:\n", e)
finally:# 不管成功还是失败,都要关闭数据库连接conn.close()

curcor中获取数据的fetchall, fetchone, fetchmany

  • fetchall: 获取当前SQL语句能查出来的全部数据
  • fetchone: 每次获取一条数据,但是获取到这条数据之后指针会往后移一行数据
  • fetchmany: 直接告诉他想要多少条数据cursor.fetchmany(3) # 获取三条数据

插入一条数据

重点一个是commit,一个是rollback。有提交的地方一定要有回滚,回滚到上次提交的地方

try:with conn.cursor() as cursor:# 准备sql语句value = "12, 'zj'"sql = f"insert into user values ({value});"# 执行SQL语句cursor.execute(sql)# 执行完SQL语句之后要提交conn.commit()print("提交成功")
except Exeption as e:# 如果执行失败要回滚conn.rollback()print("数据库操作异常:\n", e)
finally:# 不管成功还是失败,都要关闭数据库连接conn.close()

添加多条数据

    try:with conn.cursor() as cursor:# 准备要插入的数据value = "(13,'张三'),(14,'李四'),(15,'王五')"# 准备SQL语句sql = f"insert into user values {value};"# 执行SQL语句cursor.execute(sql)# 执行完要提交conn.commit()print("提交成功")except Exception as e:# 如果执行失败要回滚conn.rollback()print("数据库操作异常:\n", e)finally:# 不管成功还是失败,都要关闭数据库连接conn.close()

修改、更新数据

只需要修改添加的SQL语句,其他不变

增删改查,除了查询,其他都要提交

try:with conn.cursor() as cursor:# 准备sql语句sql = f"update user set name='封校'"# 执行SQL语句cursor.execute(sql)# 执行完提交conn.commit()
except Exception as e:# 执行失败回滚conn.rollback()print("数据库操作异常:\n", e)
finally:# 无论是否执行成功都要关闭数据库连接conn.close()

删除数据

try:with conn.cursor() as cursor:sql = "delete from user where id=12;"cursor.execute(sql)conn.commit()
except Exception as e:conn.rollback()print("数据库操作异常:\n", e)
finally:conn.close()

Python网络爬虫实践简答题相关推荐

  1. Python网络爬虫实践(1):爬取网易云音乐播放量大于1000万的歌单

    Python网络爬虫实践(1) 一.需求分析 爬取网易云音乐播放量大于1000万的歌单. 二.实施步骤 1.安装selenium selenium是一个用于Web应用自动化程序测试的工具,测试直接运行 ...

  2. Python网络爬虫实践(2):爬取小说网站小说

    Python网络爬虫实践(2) 一.需求分析 爬取某小说网站的一部小说 二.步骤 目标数据 网站 页面 分析数据加载流程 分析目标数据所对应的url 下载数据 清洗,处理数据 数据持久化 重点:分析目 ...

  3. python编程入门到实践 百度云-python网络爬虫从入门到实践pdf

    python网络爬虫从入门到实践pdf是一本非常热门的编程教学.这本书籍详细讲解了Python以及网络爬虫相关知识,非常适合新手阅读,需要的用户自行下载吧. Python网络爬虫从入门到实践电子书介绍 ...

  4. python网络爬虫教程-终于明了python网络爬虫从入门到实践

    Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python网络爬虫从入门到实践 环境配置:下载Pyth ...

  5. 【读书笔记】Python网络爬虫从入门到实践(第2版)-唐松,爬虫基础体系巩固和常见场景练习

    [概述] 书名:Python网络爬虫从入门到实践(第2版) 作者:唐松 日期:2021年08月01日 读书用时:1568页,100小时,59个笔记 [读书笔记] ◆ 1.2 网络爬虫是否合法 爬虫协议 ...

  6. python网络爬虫从入门到实践 第5章 (二)

    python网络爬虫从入门到实践 第5章 (二) https://beijing.anjuke.com/sale/ \xa0 是不间断空白符   我们通常所用的空格是 \x20 ,是在标准ASCII可 ...

  7. 《Python网络爬虫从入门到实践 第2版》第14章 爬虫实践一:维基百科

    第14章 爬虫实践一:维基百科 "是骡子是马,拉出来遛遛".我们已经将Python网络爬虫的技术系统地学习完了,后面几个章节开始进入实践环节.每一章都会使用之前学习的技术,通过实践 ...

  8. python网络爬虫学习笔记(7)动态网页抓取(二)实践

    文章目录 1 资料 2 笔记 2-1 准备 2-1-1. 网址 2-2-2 文本位置 2-2 代码 2-2-1 原型 2-2-2 ver0.1 1 资料 <Python网络爬虫从入门到实践> ...

  9. 玩转python网络爬虫黄永祥pdf下载_Python网络爬虫从入门到实践pdf

    Python网络爬虫从入门到实践 内容简介 本书将介绍如何使用Python编写网络爬虫程序获取互联网上的大数据.本书包括三部分内容:基础部分.进阶部分和项目实践.基础部分(第1~6章)主要介绍爬虫的三 ...

最新文章

  1. 计算某个时间距离现在_计算成像amp;深度学习(1)
  2. win10 安装字体且不占用系统盘资源
  3. 2019年需要探究的十大战略性技术趋势
  4. springboot 获取application参数_(最新 9000 字 )Spring Boot 配置特性解析
  5. QT绘制散点图(1)
  6. linux cpu核数和线程数,cpu个数、核数和线程的理解
  7. OpenCV2:等间隔采样和局部均值的图像缩小
  8. 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
  9. 查看Json的结构及内容:JsonViewerPackage
  10. 手机端仿ios的银行下拉脚本五
  11. R实现地理位置与经纬度相互转换
  12. mui多层tab切换上拉加载的实现
  13. 荣耀V8鸿蒙系统刷机包,华为荣耀V8原版rom系统刷机包_荣耀V8最新版升级包更新下载...
  14. MS11-003在Internet Explorer中存在允许远程代码执行漏洞复现
  15. win10系统的qq无网络连接网络连接到服务器,Win10能上qq打不开网页_Win10能上qq不能上网怎么办?-192路由网...
  16. RoboMaster视觉笔记CMake(六) Compile Flags
  17. Windows主机操作系统安全加固规范
  18. 如何通过TXT文件批量生成汉信码
  19. day fit into much one too_2018年广东省高考英语听说考试真题A-E(附答案)
  20. 幂果支招:哪里找免费的Mac版音频剪辑软件

热门文章

  1. IPP与Opencv配合使用
  2. Jquery实现淘宝服饰精品案例
  3. Linux刻录光盘win10认不到,Win10不能读取DVD光驱和刻录光盘解决方法
  4. 在没有源码的情况下修改.class文件
  5. Elasticsearch 5.0 rollover api 学习
  6. Spring Data Elasticsearch 和 x-pack 用户名/密码验证连接
  7. 使用IPMI安装操作系统--超微服务器为例,以及ipmivier安装与使用
  8. 3分钟搞明白信用评分卡模型模型验证
  9. JavaScript高级(二)|函数进阶+正则表达式
  10. 【论文阅读】7-Discovering Structural Regularity in 3D Geometry