如何使用Python中的Webbot加快查找文本的速度

如何使用Python中的Webbot加快查找文本的速度,python,python-3.7,webbot,Python,Python 3.7,Webbot,我正在运行一个在Python3.x中使用的程序——我正在编写的程序的工作,除其他外,就是在一个充满文本的页面中查找某些文本模式,并根据是否找到匹配生成结果。所以我有一堆线条看起来像这样: if web.exists("hi I'm some text", loose_match=False) == True: ifoundthetext = 1 else: ifoundthetext = 0 if web.exists("hi I'm some text", loose_mat

我正在运行一个在Python3.x中使用的程序——我正在编写的程序的工作,除其他外,就是在一个充满文本的页面中查找某些文本模式,并根据是否找到匹配生成结果。所以我有一堆线条看起来像这样:

if web.exists("hi I'm some text", loose_match=False) == True:
    ifoundthetext = 1
else:
    ifoundthetext = 0
if web.exists("hi I'm some text", loose_match=False) == True or web.exists("hi I'm some other text", loose_match=False) == True:
这确实有效,但是每次搜索大约需要一到两秒钟。我有很多不同的文本需要搜索,当它通过所有这些文本时,程序的每一个周期大约是10秒。更糟糕的是,我让程序运行的时间越长(尤其是编译后的.exe版本),程序运行的速度就越慢(如果程序已经运行了一整晚的话,速度可能会超过一分钟)。是的,我正在使用垃圾收集

我尝试过使用“或”语句组合文本结果,如下所示:

if web.exists("hi I'm some text", loose_match=False) == True:
    ifoundthetext = 1
else:
    ifoundthetext = 0
if web.exists("hi I'm some text", loose_match=False) == True or web.exists("hi I'm some other text", loose_match=False) == True:

但这对程序的速度没有影响。我怎样才能让这件事进行得更快一点,但又不抛弃韦伯?

评论清楚地表明,缺陷在于韦伯本身,它太慢了,无法完成所有重复搜索的任务

我不情愿地用Selenium重写了整个程序,但我很高兴我这么做了,因为它执行得更快

也因为整洁而使用布尔语

我的Selenium版本中的等效代码:

try:
    driver.find_element_by_partial_link_text("hi I'm some text")
    ifoundthetext = True
    print ('yay')
except:
    ifoundthetext = False

您可以使用id或选择器搜索,比如web.exists(id='elementid');您可以大大简化此代码(即使
ifoundthetext
成为布尔值;它比
int
更合适):
ifoundthetext=web.exists(“hi i'm some text”,loose\u match=False)
替换所有内容,但额外代码的开销可以忽略不计。大部分时间用于搜索文本。我不知道这个库是如何实现的,但是如果你能包含完整的代码,看看是否有可能的逻辑改进,这会对你有所帮助。在这种情况下,我不能使用元素ID,因为页面中有几个地方可能会出现文本,ID不一致。程序其余部分的逻辑应该无关紧要,因为如果我删除这些行,程序的其余部分会异常快速地运行。只是对文本本身的搜索很慢。所以,要么我使用了一种次优的搜索方式,要么webbot.py中确实有一些东西可以改进(我希望如此)。Webbot就在这里:看看
Webbot
的源代码,它到处都是糟糕的编码风格。但是,如果您一直在使用它,请尝试在
ifound时使用短路。如果在预定义集合中找到任何文本,则文本
应为
True
。您可以将
任何
函数与生成器表达式结合使用来执行此操作。