selenium的使用

2023-11-19

selenium的使用

0.使用selenium

import time
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
1.创建一个浏览器对象(双击打开谷歌浏览器)
b = Chrome()
2.输入需要控制的网站的地址
b.get('https://www.baidu.com')
3.获取标签

1)浏览器对象.find_element(查找方式, 值) - 按照指定方式获取第一个满足条件的标签,返回一个标签对象

2)浏览器对象.find_elements(查找方式, 值) -按照指定方式获取所有满足条件的标签,返回一个列表,列表中的元素是标签

查找方式:

​ 1)By.ID - 通过id属性值获取标签

​ 2)By.CLASS_NAME - 通过class属性值获取标签

​ 3)By.CSS_SELECTOR - 通过css选择器获取标签

search_box = b.find_element(By.ID, 'kw')
search_btn = b.find_elements(By.CSS_SELECTOR, '#su')
chenge_btn = b.find_element(By.ID, 'hotsearch-refresh-btn')
4.操作标签
# 1)输入框输入内容:输入框标签对象.send_keys(内容)
# search_box.send_keys('简笔画\n')

# 2)点击标签:标签对象.click()
time.sleep(1)
chenge_btn.click()

练习:打开京东-搜索巧克力

b = Chrome()
b.get('https://www.jd.com')

search_box = b.find_element(By.ID, 'key')
search_box.send_keys('巧克力\n')
5.页面滚动

js滚动页面的代码:window.scrollBy(x方向偏移量, y方向偏移量)

time.sleep(1)
for _ in range(10):
    for _ in range(10):
        b.execute_script('window.scrollBy(0, 500)')
        time.sleep(1)
    next_btn = b.find_element(By.CLASS_NAME, 'pn-next')
    next_btn.click()
# 点击下一页
next_btn = b.find_element(By.CLASS_NAME, 'pn-next')
next_btn.click()

print('滚动结束')
input()

1.打开和关闭浏览器

from selenium.webdriver import Chrome, Firefox, Safari, Ie
import time
1.创建浏览器对象(自动打开一个空的页面)
b = Chrome()
time.sleep(2)
2.打开指定页面
# 1)可以打开网页
b.get('https://www.baidu.com')
# 对浏览器内容截图
b.get_screenshot_as_file('files/baidu.png')
time.sleep(2)

# 2)打开本地的html文件
url = 'file:///D:/%E5%8D%83%E9%94%8B%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90-2022%E5%B9%B4/02%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/day4-%E4%BA%AC%E4%B8%9C%E7%99%BB%E5%BD%95%E9%A1%B5%E9%9D%A2/01%E4%BA%AC%E4%B8%9C%E7%99%BB%E5%BD%95%E9%A1%B5%E9%9D%A2.html'
b.get(url)
# 对浏览器内容截图
b.get_screenshot_as_file('files/jd.png')
time.sleep(2)
3.关闭当前页面
b.close()

2.控制浏览器大小

from selenium.webdriver import Chrome
import time

b = Chrome()
1.设置浏览器全屏显示
b.maximize_window()
b.get('https://www.baidu.com')
time.sleep(2)
2.设置窗口大小:500×500
b.set_window_size(500, 500)
time.sleep(2)

# 同时设置窗口的位置和大小
# set_window_rect(x, y, width, height)
b.set_window_rect(500, 300, 600, 300)
time.sleep(2)

b.close()
input()

3.刷新前进后退

from selenium.webdriver import Chrome
import time

b = Chrome()

# 第一次:打开百度页面
b.get('https://www.baidu.com')

time.sleep(2)
# 1.刷新页面
b.refresh()
time.sleep(2)

# 第二次:淘宝页面
b.get('https://www.taobao.com')
time.sleep(2)

# 第三次:京东页面
b.get('https://www.jd.com')
time.sleep(2)

# 2.后退
# 第一次后退到淘宝
b.back()
time.sleep(2)

# 第两次后退到百度
b.back()
time.sleep(2)

# 3.前进
# 前进到淘宝
b.forward()
time.sleep(2)

b.close()
input()

4.获取页面基本属性

from selenium.webdriver import Chrome
import time

b = Chrome()
b.get('https://movie.douban.com/top250')
time.sleep(2)
1.获取网页标标题
print(b.title)
2.获取当前网页地址
print(b.current_url)
3.获取浏览器名称
print(b.name)
4.获取当前页面的网页源代码(爬虫的时候使用)
print(b.page_source)

b.close()

5.定位标签

1.定位标签(获取标签)

浏览器对象.find_element(定位方式, 值) - 获取某一个标签,返回一个标签对象

浏览器对象.find_elements(定位方式, 值) - 获取多个标签,返回一个列表,列表中的元素是标签

1)定位方式

By.ID  - 根据标签的id属性的值获取标签
By.NAME  - 根据标签的name属性的值获取标签
By.CLASS_NAME  - 根据标签的class属性的值获取标签
By.TAG_NAME  - 根据标签名获取标签
By.LINK_TEXT  - 获取标签内容为指定值的a标签
By.PARTIAL_LINK_TEXT  - 获取标签内容包含指定值的a标签
By.CSS_SELECTOR  - 获取指定class选择器选中的标签
# a.获取第一个id属性值为'inp-query'的标签
result = b.find_element(By.ID, 'inp-query')
print(result)


# test:
result = b.find_element(By.ID, 'suggResult')
print(result)


# b.获取第一个name属性值为'search_text'的标签
result = b.find_element(By.NAME, 'search_text')
print(result)

# c.获取所有class属性值为'playable'的标签
result = b.find_elements(By.CLASS_NAME, 'playable')
print(result)
# 遍历拿到每一个class属性值为'playable'的标签,并且获取标签内容
for x in result:
    print(x.text)

# d.获取所有的p标签
result = b.find_elements(By.TAG_NAME, 'p')
for x in result:
    print(x.text)


# e.获取标签为'选电影'的内容
result = b.find_element(By.LINK_TEXT, '选电影')
print(result)
result.click()
# 练习:
result = b.find_element(By.LINK_TEXT, '排行榜')
print(result)


# f.获取标签内容中包含'影'的a标签
result = b.find_elements(By.PARTIAL_LINK_TEXT, '影')
for x in result:
    print(x.text)

result = b.find_elements(By.CSS_SELECTOR, 'ol.grid_view>li>div>.info>.hd>a>span:nth-child(1)')
for x in result:
    print(x.text)

input()

6.获取标签信息

from selenium.webdriver import Chrome
import time
from selenium.webdriver.common.by import By

b = Chrome()
b.get('https://www.baidu.com')
time.sleep(2)

# 获取标签
news = b.find_element(By.LINK_TEXT, '新闻')

# 1.获取标签内容
print(news.text)

# 2.获取标签指定属性的值
# 获取标签href的属性值
print(news.get_attribute('href'))
print(news.get_attribute('id'))

# 3.获取id(id不是id属性值,而是标签在网页中的编号)
print(news.id)

# 4.获取标签的位置(相对父标签)
print(news.location)

# 5.获取标签的大小
print(news.size)

# 6.获取标签名
print(news.tag_name)

7.键盘相关的交互操作

from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
b = Chrome()
b.get('https://www.baidu.com')
time.sleep(2)

search_box = b.find_element(By.ID, 'kw')

# 1.输入框输入内容
search_box.send_keys('新冠')
time.sleep(2)

# 2.清空输入框
search_box.clear()
time.sleep(2)

# 3.回车确认
search_box.submit()
time.sleep(2)

search_box = b.find_element(By.ID, 'kw')
search_box.send_keys('疫情最新消息')
time.sleep(2)
# 4.模拟删除键
search_box.send_keys(Keys.BACK_SPACE)
time.sleep(2)

# ctrl+a -> ctrl+c ->清空 ->ctrl+v
# 5.模拟全选(ctrl+A)
search_box.send_keys(Keys.CONTROL, 'a')
time.sleep(2)

search_box.send_keys(Keys.CONTROL, 'c')
time.sleep(2)

search_box.send_keys(Keys.BACK_SPACE)
time.sleep(2)

search_box.send_keys(Keys.CONTROL, 'v')
time.sleep(2)

input()

8.鼠标相关的交互操作

from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
import time

b = Chrome()
b.get('https://www.baidu.com')
time.sleep(2)
1.左键:click()
logo = b.find_element(By.ID, 'lg')
logo.click()
time.sleep(2)

# 注意:除了按左键,其他的鼠标交互动作属于复杂的动作,需要动作链来完成
from selenium.webdriver.common.action_chains import ActionChains
2.右键:context_click()
ActionChains(b).context_click(logo).perform()
time.sleep(2)
3.双击:double_click()
div = b.find_element(By.CLASS_NAME, 'accessibility-icon')
ActionChains(b).double_click(div).perform()
time.sleep(3)
4.悬停
span = b.find_element(By.ID, 's-usersetting-top')
ActionChains(b).move_to_element(span).perform()
time.sleep(5)
5.拖拽
b.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
time.sleep(2)
# 注意:如果在网页源代码中有iframe标签,并且需要操作的内容在这个iframe里面,那么操作之前需要切换窗口
new_window = b.find_element(By.ID,'iframeResult')
b.switch_to.frame(new_window)
goal_div = b.find_element(By.ID, 'droppable')
drag_div = b.find_element(By.ID, 'draggable')
ActionChains(b).drag_and_drop(drag_div, goal_div).perform()
time.sleep(3)

input()

9.选项卡切换

from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
import time

b = Chrome()

# 打开百度(b指向百度页面)
b.get('https://ww.baidu.com')
time.sleep(1)

# 点击新闻对应的a标签,在新的选项卡中打开新的页面(b还是指向百度首页)
news = b.find_element(By.LINK_TEXT, '新闻')
news.click()
# 1.选项卡切换
# 1)获取当前浏览器所有选项卡
all_handle = b.window_handles
print(all_handle)

# 2)切换选项卡
# 切换到新闻页面
b.switch_to.window(all_handle[1])
time.sleep(2)

# 获取新闻页面中的新闻图标
logo = b.find_element(By.CSS_SELECTOR, 'div.logo')
# print(logo)
logo.click()
time.sleep(1)

# 关闭新闻页面
b.close()

# 回到首页
b.switch_to.window(all_handle[0])
time.sleep(1)

search = b.find_element(By.ID, 'kw')
search.send_keys('你好\n')

10.拖拽的操作

from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time

b = Chrome()
b.get('http://www.jm8008.com/SignIn.jsp')
time.sleep(2)

btn = b.find_element(By.CLASS_NAME, 'geetest_radar_tip_content')
btn.click()
time.sleep(5)

# 获取需要拖拽的目标标签
source = b.find_element(By.CLASS_NAME,'geetest_slider_button')

action = ActionChains(b)
# 将指定的标签在x轴方向拖拽150像素
action.drag_and_drop_by_offset(source, 180, 0)
action.perform()

input()

11.中国知网数据分析关键字提取

from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
import time

b = Chrome()
b.get('https://www.cnki.net/')
time.sleep(1)
# 搜索数据分析
search = b.find_element(By.ID,'txt_SearchText')
search.send_keys('数据分析\n')
time.sleep(1)

# 所有搜索结果对应论文名称标签
all_name = b.find_elements(By.CSS_SELECTOR, 'td.name>a')
print(all_name)
# 按顺序一个一个点击论文名字
for x in all_name:
    x.click()
    time.sleep(1)
    # 切换到详情页对应的选项卡
    all_handles = b.window_handles
    b.switch_to.window(all_handles[-1])
    time.sleep(1)
    # 获取关键词
    try:
        p = b.find_element(By.CLASS_NAME, 'keywords')
        print(p.text)
    except:
        print('没有关键词!')
    # 关闭当前详情页
    b.close()
    # 切换到首页
    b.switch_to.window(all_handles[0])

input()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

selenium的使用 的相关文章

随机推荐

  • 安装用jieba,实现用TF-IDF算法进行关键词的提取

    文本知识提取 目录 1 安装jieba 2 TF IDF算法 2 1算法的定义 2 2算法的应用 1 词性标注 2 去停用词 3 关键词提取 1 安装jieba Jieba分词官网 https github com fxsjy jieba
  • 基于k8s的微服务一键部署解决方案

    父项目msagd配置 编写pom xml的属性标签
  • Day8_8 Java学习之List集合类

    目录 一 List集合的概述 ArrayList集合类的概述 ArrayList集合的语法定义 ArrayList集合的常用方法 LinkedList集合概述 LinkedList集合的语法定义 LinkedList集合类常用方法 二 Se
  • Unity项目资源加载管理简易框架(Resource)

    文章目录 一 背景 二 思路概述 三 具体实现代码及其思路梳理 1 资源路径 2 资源管理 3 资源加载 4 资源管理 四 说明 一 背景 在Unity的轻量型项目中如果对优化没有特别搞得要求 如果需要用到Resource Load这个接口
  • 算高差改正数的计算机程序,水准测量中测量高差的改正数怎么计算?

    原标题 水准测量中测量高差的改正数怎么计算 工程测量中 高速铁路 城市轨道涉及到二等水准 一般铁路涉及三 四等水准 高速公路 房建 市政一般采用四等水准 沉降观测各等级均涉及 在水准测量中高差的改正三四等水准需要进行水准标尺长度改正 正常水
  • 基于51单片机简易电子琴设计(含Keil程序和Proteus文件)

    一 系统概述 系统使用的模块有AT89C51单片机 8位共阳数码管 矩阵键盘 小灯 按键 蜂鸣器 本次设计的电子琴系统以AT89C51单片机为控制核心 使用数码管显示音符 右侧的矩阵键盘可以理解为琴键 按下不同的按键就能显示不同的音符 按下
  • 最新服务器CPUe5,看这里!2019 至强 Xeon E5 服务器系列 CPU 天梯图分享

    排名名称评分 1Intel Xeon E5 2679 v4 2 50GHz25 236 2Intel Xeon E5 2699 v4 2 20GHz23 200 3Intel Xeon E5 2696 v3 2 30GHz22 548 4I
  • LNCS用户写作指南【 Springer Computer Science Proceedings 】

    转自 http blog csdn net wyskys article details 18075471 重点是文末的参考文献格式 主要的是 链接 期刊论文 会议论文的引用格式 下載地址 http static springer com
  • Jsoup 抓取网页内容demo

    1 代码 public Document getDocument String url try return Jsoup connect url get catch IOException e e printStackTrace retur
  • 为什么电脑的时间总是快2分钟

    由于工作需要 今天领到一台新的笔记本 轻轻地抚摸 新伙伴 的同时 发现笔记本的时间 快了2分钟 o o表情 明明已经联网了 为啥还是快两分钟呢 于是我就一顿操作猛如虎 结果一看 服务器连接的是 time windows com 这可不行 我
  • 【Linux】Ubuntu系统下用apt命令删除/卸载软件包

    大家都知道 在ubuntu中安装一个新的软件包时 直接使用sudo apt get install命令就好 那么 如果要卸载或者删除一个软件包呢 1 删除为了满足依赖而安装的 但现在不再需要的软件包 包括已安装包 保留配置文件 这个命令容易
  • C/C++编程题开头字符串、数据输入几种写法

    1 题设 在IT公司编程题中 多数会让你一并写上测试数据输入和结果输出的Demo 这也是程序员基本的功底 想一想如果连自己的测试数据都无法给入 后面的算法写的再好 也无法测试它的准确性和效果 下面分别从c c 以及字符串输入和数组输入 来谈
  • Python 多线程、线程池、进程池

    线程间的通讯机制 消息队列 event 事件对象 当线程创建完成之后 并不会马上执行线程 而是等待某一事件发生 线程才会启动 import threading 创建 event 对象 event threading Event 重置代码中的
  • BeyondCompare破解版的下载安装

    目前Beyond Compare的版本已经支持到4 2的release版本 官网 https www scootersoftware com download php 支持 windows mac linux版本 这里我们选择的mac版本
  • android设置白天模式和夜间模式

    if isDay AppCompatDelegate setDefaultNightMode AppCompatDelegate MODE NIGHT YES else AppCompatDelegate setDefaultNightMo
  • python3GUI--抖音无水印视频下载工具(附源码)

    文章目录 一 准备工作 二 预览 0 复制抖音分享短链接 1 启动 2 运行 3 结果 三 设计流程 1 总体设计 2 详细设计 四 源代码 五 说明 总结 hello 大家好啊 失踪人口回归了 捂脸 本次使用tkinter撰写一篇 抖音无
  • QML中ListView数据的分组与定位显示

    在QML中ListView的数据分组与定位显示时 以前使用ListView进行数据分组时 都是在model中加入分组数据 分组的项 然后将model中的数据排好序后全部显示到ListView中 这样做也能达到数据分组的目的 但是数据维护太费
  • 为什么List,set,map 不继承Serializable接口

    为什么List set map 不继承Serializable接口 猜测 应该是默认不继承 但实际上可以继承 只要是object都可以实现这个接口只是默认不这样干 有三个可能 一 是不知道怎么实现默认接口 二 不允许实现默认接口 三 暂时没
  • UITextFeild Test

    import
  • selenium的使用

    selenium的使用 0 使用selenium import time from selenium webdriver import Chrome from selenium webdriver common by import By 1