【NLP开发】Python实现聊天机器人(Selenium、七嘴八舌)

news2024/9/22 10:04:34

在这里插入图片描述

🍺NLP开发系列相关文章编写如下🍺:
1🎈【NLP开发】Python实现词云图🎈
2🎈【NLP开发】Python实现图片文字识别🎈
3🎈【NLP开发】Python实现中文、英文分词🎈
4🎈【NLP开发】Python实现聊天机器人(ELIZA))🎈
5🎈【NLP开发】Python实现聊天机器人(ALICE)🎈
6🎈【NLP开发】Python实现聊天机器人(ChatterBot)🎈
7🎈【NLP开发】Python实现聊天机器人(微软Azure)🎈
8🎈【NLP开发】Python实现聊天机器人(微软小冰)🎈
9🎈【NLP开发】Python实现聊天机器人(钉钉机器人)🎈
10🎈【NLP开发】Python实现聊天机器人(微信机器人)🎈
11🎈【NLP开发】Python实现聊天机器人(Selenium、七嘴八舌)🎈

文章目录

  • 1、简介
    • 1.1 安装WebDriver
    • 1.2 安装Python
    • 1.3 安装Selenium
  • 2、青云客机器人
  • 3、思知机器人
  • 4、七嘴八舌
  • 结语

1、简介

1.1 安装WebDriver

(1)使用 WebDriver 自动执行 Microsoft Edge:
https://learn.microsoft.com/zh-cn/microsoft-edge/webdriver-chromium/?tabs=python

WebDriver 允许你通过模拟用户交互来自动执行 Microsoft Edge。 使用 WebDriver 的测试相比于在浏览器中运行的 JavaScript 单元测试有一些优势:

  • WebDriver 可以使用在浏览器中运行的 JavaScript 不可使用的功能和信息。
  • WebDriver 比 JavaScript 单元测试更准确地模拟用户事件或 OS 级事件。
  • WebDriver 管理单个测试会话中的多个窗口、选项卡、网页。
  • WebDriver 在特定计算机上运行多个 Microsoft Edge 会话。

(2)下载 Microsoft Edge WebDriver:
请确保安装的 Edge WebDriver 版本与浏览器版本匹配,如下所示:
转到 edge://settings/help 并记下你的 Microsoft Edge 版本。

# edge
edge://settings/help
Edge driver:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

# chrome
chrome://version/
Chrome driver:http://chromedriver.storage.googleapis.com/index.html

在这里插入图片描述

下载 Microsoft Edge WebDriver。
https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver/

在这里插入图片描述
下载完成后,将 msedgedriver 可执行文件提取到首选位置。 将可执行文件所在的文件夹添加到你的 PATH 环境变量。或者把msedgedriver.exe放在Python的安装文件夹里也可以。
在这里插入图片描述

1.2 安装Python

下载地址:
https://www.python.org/downloads/

在这里插入图片描述
Python的安装界面如下:
在这里插入图片描述
Python的安装后文件夹如下:
在这里插入图片描述

具体安装可以查看如下文章:
【小沐学python】(一)Python开发准备

打印Python的版本信息:
在这里插入图片描述

1.3 安装Selenium

下载 Microsoft Edge WebDriver 后,必须下载的最后一个组件是 WebDriver 测试框架。 测试作者使用 WebDriver 测试框架编写端到端测试并自动执行浏览器。 WebDriver 测试框架提供特定于语言的界面,用于将代码转换为 Edge WebDriver 在 Microsoft Edge 中运行的命令。 WebDriver 测试框架适用于所有主要平台和语言,例如 Python、Java、C#、Ruby、JavaScript。

在这里插入图片描述

Selenium WebDriver 是一个开放源代码测试框架,可在任何平台上使用,并为 Java、Python、C#、Ruby、JavaScript 提供语言绑定。 注意:运行 Selenium 4 测试需要 Python 3。 不支持 (Python 2.7。)

Selenium 是一个用于 Web 应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括 IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge 等。

若要使用 WebDriver 自动执行 Microsoft Edge,如果使用 Selenium,则必须使用 Selenium 4,它具有对 Microsoft Edge (Chromium) 的内置支持。

Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedriver ,CNPM Binaries Mirror (npmmirror.com), taobao备用地址
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs
  • 自动化 Microsoft Edge:
    Selenium 使用 EdgeDriver 类来管理 Microsoft Edge 会话。
    • 启动 Microsoft Edge 会话。
    • 指示 Microsoft Edge 转到必应。
    • 搜索“WebDriver”。
    • 休眠几秒钟,以便查看结果。

安装python的selenium库:

pip install selenium

在这里插入图片描述

selenium的测试代码片段如下:

from selenium import webdriver

# driver = webdriver.Firefox()   # Firefox浏览器
# driver = webdriver.Chrome()    # Chrome浏览器
# driver = webdriver.Ie()        # Internet Explorer浏览器
# driver = webdriver.Opera()     # Opera浏览器
# driver = webdriver.PhantomJS()   # PhantomJS

# driver = webdriver.Edge("C:\Python38\msedgedriver.exe")      # Edge浏览器
driver = webdriver.Edge()

# 打开网页
url = "http://www.baidu.com"
driver.get(url) 

# TODO

driver.close()

在这里插入图片描述

from selenium import webdriver
from msedge.selenium_tools import Edge, EdgeOptions

options = EdgeOptions()
options.use_chromium = True
options.binary_location = r"C:\Program Files (x86)\Microsoft\EdgeCore\110.0.1587.46\msedge.exe" # 浏览器的位置

driver = Edge(options=options, executable_path=r"C:\Python38\msedgedriver.exe") # 相应的浏览器的驱动位置
driver.get("http://www.baidu.com")

在这里插入图片描述

  • 自动化 Microsoft Edge
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Edge()

driver.get('https://bing.com')

element = driver.find_element(By.ID, 'sb_form_q')
element.send_keys('WebDriver')
element.submit()

time.sleep(5)
driver.quit()
  • 管理和配置 Edge WebDriver 服务
from selenium import webdriver
from selenium.webdriver.edge.service import Service

service = Service(verbose = True)

driver = webdriver.Edge(service = service)
  • 选择特定浏览器二进制文件
from selenium import webdriver
from selenium.webdriver.edge.options import Options

options = Options()
options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge Beta\Application\msedge.exe"

driver = webdriver.Edge(options = options)
  • 传递额外的命令行参数
from selenium import webdriver
from selenium.webdriver.edge.options import Options

options = Options()
options.add_argument("headless")

driver = webdriver.Edge(options = options)
  • 其他 WebDriver 安装选项
docker run -d -p 9515:9515 mcr.microsoft.com/msedge/msedgedriver
  • sendkeys可以模拟键盘输入,也可以用来模拟键盘上的按键,甚至是组合键。
键值解释
send_keys(Keys.BACK_SPACE)删除键BackSpace
send_keys(Keys.SPACE)空格键Space
send_keys(Keys.TAB)制表键Tab
send_keys(Keys.ESPACE)回退键Esc
send_keys(Keys.ENTER)回车键Enter
send_keys(Keys.CONTROL,‘a’)全选Ctrl+A
send_keys(Keys.CONTROL,‘c’)复制CTRL+C
send_keys(Keys.CONTROL,‘x’)剪切CTRL+X
send_keys(Keys.CONTROL,‘v’)粘贴Ctrl+V
send_keys(Keys.F1)键盘F1
send_keys(Keys.F12)键盘F12
  • 模糊定位方式
    driver.find_element_by_xpath(‘//[contains(@id,“ogin-emai”)]‘).send_keys(“小沐测试”)
    driver.find_element_by_xpath(’//
    [starts-with(@id,“login-emai”)]’).send_keys(“小沐测试”)
    driver.find_element_by_xpath(‘//*[ends-with(@id,“ogin-email”)]’).send_keys(“小沐测试”)
## 旧版本Selenium元素定位代码:
# inputTag = driver.find_element_by_id("value")  # 利用ID查找
# inputTags = driver.find_element_by_class_name("value")  # 利用类名查找
# inputTag = driver.find_element_by_name("value")  # 利用name属性查找
# inputTag = driver.find_element_by_tag_name("value")  # 利用标签名查找
# inputTag = driver.find_element_by_xpath("value")  # 利用xpath查找
# inputTag = driver.find_element_by_css_selector("value")  # 利用CSS选择器查找

## 新版本Selenium元素定位代码:
# inputTag = driver.find_element(By.ID, "value") # 利用ID查找
# inputTag = driver.find_element(By.CLASS_NAME, "value")  # 利用类名查找
# inputTag = driver.find_element(By.NAME, "value")  # 利用name属性查找
# inputTag = driver.find_element(By.TAG_NAME, "value") # 利用标签名查找
# inputTag = driver.find_element(By.XPATH, "value") # 利用xpath查找
# inputTag = driver.find_element(By.CSS_SELETOR, "value") # 利用CSS选择器查找

2、青云客机器人

官网地址:
http://api.qingyunke.com/

# 导入模块
import requests
from urllib import parse

# 组装请求
def test_get(msg):
    url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(parse.quote(msg))
    html = requests.get(url)
    return html.json()["content"]

# 解析返回并打印
while True:
    msg = input("我:")
    res = test_get(msg)
    print("答:", res)

在这里插入图片描述
上面图中有一个在线机器人:人工智能聊天DEMO
闲得无聊的小沐现在编写一段Python代码和它聊会天:

# -*- coding: utf-8 -*-
# @File    : test_robot_qingke.py
# @Time    : 2023/02/19 11:21
# @Author  : 爱看书的小沐
# @Blog    : https://blog.csdn.net/hhy321?type=blog
# @Desc    : selenium+青云客机器人。

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

driver = webdriver.Edge()
driver.get('http://api.qingyunke.com/#products')

sleep(5)
msg_input = driver.find_element(By.ID, 'ui_inp_msg')
msg_send = driver.find_element(By.CLASS_NAME, "send")

msg_list = ['hello world', '我是可爱的小沐,你是谁?', '我是谁?', '给小沐讲一个笑话', '小沐写一封信给未来的自己']
msg_count = 1

for i in range(len(msg_list)):
    msg_item = msg_list[i]
    print("小沐>> ", msg_item)
    msg_input.send_keys(msg_item)
    msg_send.click()
    sleep(3)
    
    ul = driver.find_element(By.XPATH, '//ul[@id="ui_msg_box"]')
    lis = ul.find_elements(By.XPATH, 'li')
    count = len(lis)
    # print("msg's count: ", count)
    print("青云客>> ", lis[-1].text)
    sleep(1)

print("小沐>> Byte!")
sleep(15)
driver.close()

浏览器运行如下:
在这里插入图片描述
代码输出如下:
在这里插入图片描述

3、思知机器人

官网地址:
https://www.ownthink.com/robot.html

import json
import requests

sess = requests.get('https://api.ownthink.com/bot?spoken=姚明多高啊?')

answer = sess.text
answer = json.loads(answer)
print(answer)

在这里插入图片描述
上面图中有一个在线机器人:思知机器人
郁闷的小沐现在编写一段Python代码和它聊会天:

# -*- coding: utf-8 -*-
# @File    : test_robot_sizhi.py
# @Time    : 2023/02/19 11:21
# @Author  : 爱看书的小沐
# @Blog    : https://blog.csdn.net/hhy321?type=blog
# @Desc    : selenium+思知机器人。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep

driver = webdriver.Edge()
driver.get('https://www.ownthink.com/robot.html')
sleep(5)

msg_footer = driver.find_element(By.CLASS_NAME, "footer")
msg_input = msg_footer.find_element(By.XPATH, '//input')
msg_list = ['hello world', '我是可爱的小沐,你是谁?', '我是谁?', '给小沐讲一个笑话', '小沐写一封信给未来的自己']

for i in range(len(msg_list)):
    msg_item = msg_list[i]
    print("小沐>> ", msg_item)
    msg_input.send_keys(msg_item)
    msg_input.send_keys(Keys.ENTER)
    sleep(1)

    div_body = driver.find_element(By.XPATH, '//div[@class="body"]')
    div_chats = div_body.find_elements(By.XPATH, '//*[contains(@class,"robot")]')
    count = len(div_chats)
    print("msg's count: ", count)
    
    sleep(3)
    print("思知机器人>> ", div_chats[-1].text)
		
print("小沐>> Byte!")
sleep(15)
driver.close()

浏览器运行如下:
在这里插入图片描述

代码输出如下:
在这里插入图片描述
在这里插入图片描述

4、七嘴八舌

有一天,小沐、邱大大、青云客、思知机器人在一起闲聊。
在这里插入图片描述

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!
在这里插入图片描述

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

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

相关文章

XSS注入进阶练习篇(二)DOM型XSS注入深入

DOM型XSS注入深入1. SVG 劫持JS执行1.1 DOM树的概念与构建过程1.1.1 什么是DOM树?1.1.2 DOM树的构建过程1.2 探究img失败的原因1.3 svg标签劫持innerhtml2. details标签 特定条件下劫持JS执行2.1 事件触发流程2.2 实例3.DOM clobbering 绕过3.1 什么是DOM clobberin…

Redis内存回收

Redis 内存回收 Redis之所以性能很强&#xff0c;最主要的原因是基于内存存储&#xff0c;然而单节点的Redis其内存大小不宜过大&#xff0c;会影响持久化或主从同步性能 可以通过修改配置文件来设置Redis的最大内存 maxmemory <bytes>当内存达到上限时&#xff0c;就…

营销狂人杜国楹的两大顶级思维

“营销狂人”小罐茶 杜国楹两大顶级思维 1.一定要有【参照物思维】 2.一定要有【终局思维】 趣讲大白话&#xff1a;大牛的思考就是不同 *********** 杜国楹对茶行业思考 1.参照咖啡、酒的发展路径 2.中国茶工业化,品牌化是唯一壮大之路 3.龙头企业必须全品 没有参照物思维就没…

Python将内容写入文件的方法总结。

使用Python写入文件是我们coder的日常&#xff0c;本篇带你详细看一下python将内容写入文件的方法以及细节。主要包括write()方法、writelines() 方法、print() 函数、使用 csv 模块、使用 json 模块。 目录 一、write()方法 二、writelines() 方法 三、print() 函数 四、使…

【Java】中的各种锁

Java提供了种类丰富的锁&#xff0c;每种锁因其特性的不同&#xff0c;在适当的场景下能够展现出非常高的效率。 一、Java锁是什么&#xff1f;为什么要用Java锁&#xff1f; 在并发编程中&#xff0c;经常遇到多个线程访问同一个共享资源 &#xff0c;这时候作为开发者必须考…

【汇编】一、环境搭建(一只 Assember 的成长史)

嗨~你好呀&#xff01; 我是一名初二学生&#xff0c;热爱计算机&#xff0c;码龄两年。最近开始学习汇编&#xff0c;希望通过 Blog 的形式记录下自己的学习过程&#xff0c;也和更多人分享。 这篇文章主要讲述汇编环境的搭建过程。 话不多说~我们开始吧&#xff01; 系统环…

Ubuntu下安装 ntfs-3g

目录1.FAT32、NTFS和exFAT2.ubuntu 安装 ntfs-3g2.1 直接安装2.2 源码安装1.FAT32、NTFS和exFAT U盘在格式化的时候都会有三种格式分别是FAT32、NTFS和exFAT。 FAT32格式   FAT32格式硬盘分区的最大容量为2TB&#xff0c;虽然U盘做不到&#xff0c;但是现在1xTB硬盘都有了&…

实现8086虚拟机(三)——指令解码

文章目录中间指令格式解码模块的实现编译器将汇编语句翻译成机器指令&#xff0c;而虚拟机做的工作正好相反&#xff0c;就是将机器指令解码成可以识别的中间形式&#xff0c;然后执行。为什么要这么做&#xff1f;拿 mov 指令举例&#xff0c;看下它的机器指令的格式&#xff…

手动创建 vue2 ssr 开发环境

本文和个人博客同步发表 更多优质文章查看个人博客 前言 手动搭建 vue ssr 一直是一些前端开发者的噩梦&#xff0c;因为其中牵扯到很多依赖包之间的配置以及webpack在node中的使用。就拿webpack配置来说&#xff0c;很多前端开发者还是喜欢用webpack-cli脚手架搭建项目。导致…

NCHW - NHWC - CHWN 排列

TensorFlow有两种数据格式NHWC和NCHW,默认的数据格式是NHWC,可以通过参数data_format指定数据格式。这个参数规定了 input Tensor 和 output Tensor 的排列方式。 1、data_format 设置为 “NHWC” 时,排列顺序为 [batch, height, width, channels] 设置为 “NCHW” 时,排…

Linux中常用命令汇总三

Linux中常用命令汇总二地址&#xff1a;https://blog.csdn.net/u011837804/article/details/1289972501、用户组管理类每个用户都有一个用户组&#xff0c;系统可以对一个用户组中的所有用户进行集中管理。不同 Linux 系统对用户组的规定有所不同&#xff0c;如Linux下的用户属…

MIPI CSI 进一步理解

CSI&#xff08;Camera Serial Interface&#xff09;定义了摄像头外设与主机控制器之间的接口&#xff0c;旨在确定摄像头与主机控制器在移动应用中的标准。 CSI关键词描述 缩写 解释 CCI Camera Control Interface&#xff08;物理层组件&#xff0c;通常使用I2C或I3C进行通…

显示技术之器件---LED、Mini LED、Micro LED、OLED、LCD、SMD、SMT

显示技术之基础—半导体 1、LED 1.1 LED(Light Emitting Diode) 即发光二极管&#xff0c;是一种半导体固体发光器件&#xff0c;它是利用固体半导体芯片作为发光材料&#xff0c;当两端加上正向电压&#xff0c;半导体中的载流子发生复合引起光子发射而产生光。LED由含镓&a…

基于SpringBoot的卓越导师双选系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

九龙证券|机构密集调研银行业!这些上市银行尤其受捧,关注两大变量

2023年开年以来&#xff0c;组织连续了上一年对上市银行的调研热情。 Wind数据显现&#xff0c;到现在&#xff0c;年内已有9家银行承受637家组织调研&#xff0c;参加调研的组织数较上一年同期添加近一成。 其间&#xff0c;7家被调研银行均处江浙区域。上一年以来&#xff0…

Docker 学习笔记

概述 1. 什么是 Docker&#xff1f; Docker 是一个应用容器平台&#xff0c;管理项目中用到的所有环境&#xff08;MySQL、Redis…&#xff09; 2. Docker 和虚拟机的区别 虚拟机是携带操作系统的&#xff0c;本身很小的应用程序因为携带了操作系统而变得十分笨重&#xff0…

WebRTC paced sender

文章目录4.1 pacer创建4.2 音视频数据包发送4.3 webrtc::PacketRouter4.4 Pacer 媒体数据发送控制4.5 pacer 中的码率探测paced sender通常简称为pacer&#xff0c;其是WebRTC RTP栈的一部分&#xff0c;用于平滑发送到网络上的数据流包&#xff0c;考虑一个帧率为60fps带宽为1…

linux高级命令之线程的注意点

线程的注意点学习目标能够说出线程的注意点1. 线程的注意点介绍线程之间执行是无序的主线程会等待所有的子线程执行结束再结束线程之间共享全局变量线程之间共享全局变量数据出现错误问题2. 线程之间执行是无序的import threading import timedeftask():time.sleep(1)print(&qu…

一句话解读《持续交付》核心能力

​DevOps 是基于持续交付的软件工程。DevOps的核心知识体系在DevOps 四书。持续交付主要是指应用软件集成交付环节&#xff0c;通过配置管理、构建与持续集成、测试管理、部署与发布管理、环境管理、数据管理和度量管理领域的能力建设和工程实践保证软件持续顺畅高质量的对用户…

JavaWeb9-volatile解决内存可见性和指令重排序问题

目录 1.解决内存可见性问题 2.解决指令重排序问题 3.volatile缺点 4.特使使用场景 volatile&#xff08;易变的&#xff0c;易挥发的&#xff0c;不稳定的&#xff09;可以解决内存可见性和指令重排序的问题。 1.解决内存可见性问题 代码在写入 volatile 修饰的变量时&am…