
文章目录
随着时代的变迁,聊天机器人逐渐步入正轨,各大平台也相继推出自己的开放平台以满足机器人的开发,对于机器人开发者们来说,既是机遇,也是挑战!

(1)使用 WebDriver 自动执行 Microsoft Edge:
https://learn.microsoft.com/zh-cn/microsoft-edge/webdriver-chromium/?tabs=python
WebDriver 允许你通过模拟用户交互来自动执行 Microsoft Edge。 使用 WebDriver 的测试相比于在浏览器中运行的 JavaScript 单元测试有一些优势:
(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的安装文件夹里也可以。

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

Python的安装界面如下:

Python的安装后文件夹如下:

具体安装可以查看如下文章:
【小沐学python】(一)Python开发准备
打印Python的版本信息:

下载 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
安装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")

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()
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)
docker run -d -p 9515:9515 mcr.microsoft.com/msedge/msedgedriver
| 键值 | 解释 |
|---|---|
| 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 |
## 旧版本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选择器查找
官网地址:
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()
Selenium浏览器运行如下:

Python代码输出如下:

官网地址:
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()
Selenium浏览器运行如下:

Python代码输出如下:


官网地址:
https://drea.cc/

上面图中有一个在线机器人:梦幻smile机器人
没睡醒的小沐现在编写一段Python代码和它聊会天,提提神:
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://drea.cc/chat.php')
sleep(15)
msg_footer = driver.find_element(By.ID, "text_content")
msg_input = msg_footer.find_element(By.XPATH, '//textarea')
msg_list = ['hello world', '我是可爱的小沐,你是谁?', '我是谁?', '给小沐讲一个笑话', '小沐写一封信给未来的自己']
msg_count = 2
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(3)
div_body = driver.find_element(By.XPATH, '//div[@class="message"]')
div_messages = div_body.find_elements(By.XPATH, '//div[@class="text"]')
count = len(div_messages)
print("梦幻机器人>> ", div_messages[count-2].text)
sleep(1)
print("小沐>> Byte!")
sleep(15)
driver.close()
Selenium浏览器运行如下:

Python代码输出如下:

官网地址:
https://drea.cc/

上面图中有一个在线机器人:小i机器人
快饿晕的小沐现在编写一段Python代码和它聊会天,提提神:
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('http://i.xiaoi.com/#')
sleep(5)
msg_input = driver.find_element(By.ID, "inputArea")
msg_list = ['hello world', '我是可爱的小沐,你是谁?', '我是谁?', '给小沐讲一个笑话', '小沐写一封信给未来的自己']
msg_count = 0
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(3)
div_body = driver.find_element(By.XPATH, '//div[@id="outputArea"]')
div_messages = div_body.find_elements(By.XPATH, '//div[@class="robotContent"]')
count = len(div_messages)
print("msg's count: ", msg_count, count)
print("小i机器人>> ", div_messages[len(div_messages)-1].text)
sleep(1)
print("小沐>> Byte!")
sleep(15)
driver.close()
Selenium浏览器运行如下:

Python代码输出如下:

有一天,小沐、邱大大、青云客、思知机器人在一起闲聊。


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

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD