首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在selenium旁边运行其他命令

在selenium旁边运行其他命令
EN

Stack Overflow用户
提问于 2021-09-11 14:16:10
回答 1查看 41关注 0票数 1

我目前正在尝试制造一个启动selenium线程的不和谐的机器人。它可以工作,但唯一的问题是,如果selenium花费的时间太长,我就不能使用其他命令。它最终会响应下一个命令,但只有在selenium完成之后才会进行响应。

这就是我所拥有的:

代码语言:javascript
复制
import threading
import discord
import time
from selenium import webdriver
from discord.ext import tasks, commands

client = commands.Bot(command_prefix='!')

def start(url):
    driver = webdriver.Firefox()
    driver.get(url)
    time.sleep(10)
    driver.close()

@client.command()
async def rq(ctx):
    #if link == None:
        #await ctx.send("Please send a link!")
    await ctx.send("Started!")
    threading(target=start("https://google.com/")).start()

@client.command()
async def sc(ctx):
    await ctx.send("some command")

if __name__ == "__main__":
    client.run(token)

任何解决方案都是有帮助的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-11 14:23:29

调用线程的方式是不正确的:

代码语言:javascript
复制
threading(target=start("https://google.com/")).start()

这样做的目的是:

  1. 调用主线程上的start函数,传递给它URL。
  2. 等待函数完成。
  3. 将返回的值(None)作为target函数传递给线程构造函数(顺便说一下,您的意思是d10那里)。H 211G 212

因此,当线程开始时,主线程上的实际工作已经完成,而线程本身却什么也不做。

启动线程并传递一些参数的正确方法是:

代码语言:javascript
复制
threading.Thread(target=start, args=("https://google.com/",)).start()

注意start后面没有跟着(),所以我们不是直接调用函数,而是将函数本身传递给Thread构造函数。参数作为元组给出args参数(因此后面的逗号)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69143789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档