【发布时间】:2020-10-18 22:46:28
【问题描述】:
所以假设我正在尝试使用 selenium 自动执行网页上的任务。
我必须单击多个按钮,这些按钮将我带到页面的不同部分,我必须在其中运行不同的功能来执行不同的任务。每次点击这些按钮,当相应的任务完成时,一个计时器就会出现在按钮的位置。当那个计时器用完时,我必须再次点击那个按钮并运行相应的任务功能,然后冲洗并重复。
这是我尝试过的代码:
import selenium
import threading
driver = webdriver.Chrome()
driver.get("https://example.com")
def foo1():
button1 = driver.find_element_by_id("button1")
button1.click()
# do stuff
timer = int(button1.text)
threading.Timer(timer, foo1).start()
def foo2():
button2 = driver.find_element_by_id("button2")
button2.click()
# do stuff
timer = int(button2.text)
threading.Timer(timer, foo2).start()
def foo3():
button3 = driver.find_element_by_id("button3")
button3.click()
# do stuff
timer = int(button3.text)
threading.Timer(timer, foo3).start()
foo1()
foo2()
foo3()
现在,我的问题是,因为有多个这样的按钮,可能会出现一个计时器耗尽而另一个功能正在运行的情况。这会导致脚本在没有完成当前任务序列的情况下点击离开,从而终止其中一个线程。
我尝试过使用 threading.Lock() 对象,但它们没有解决问题。我有错误的方法还是我只是在这里遗漏了什么?
【问题讨论】:
-
您应该在当前定义它们的函数之外创建和启动线程
-
您在使用 Lock 对象时尝试了什么?您是在启动新计时器之前放置的吗?
-
@g2i 我在每个函数中定义了一个 Lock 对象,在开始时获取它,并在定义 Timer 对象之前释放它
-
@AbhinavMathur 你能详细说明一下吗?
-
@Emrys 为同样添加了答案
标签: python multithreading selenium