Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何同时使用不同iFrame中的不同线程?_Python 3.x_Multithreading_Selenium Webdriver_Iframe - Fatal编程技术网

Python 3.x 如何同时使用不同iFrame中的不同线程?

Python 3.x 如何同时使用不同iFrame中的不同线程?,python-3.x,multithreading,selenium-webdriver,iframe,Python 3.x,Multithreading,Selenium Webdriver,Iframe,TL;医生: 由于webdriver状态不同(switch_to()-状态不同),两个线程相互干扰(请参见代码示例“1”和“2”) 更详细: 有一个网站(不是我的,访问受限,不能在这里显示)内有1个主页和3个iFrame。 主页上有一个计数器——我每秒读取一次计数器的值。 然后我有一个GUI,在那里我可以与QSlider交互,QSlider可以对3个iFrame中的一个进行更改 因此,我有一个GUI线程和另一个线程(例如,检查时间) 出现问题的地方: 如果QSlider信号发出,则被调用的函数将

TL;医生:

由于webdriver状态不同(switch_to()-状态不同),两个线程相互干扰(请参见代码示例“1”和“2”)

更详细:

有一个网站(不是我的,访问受限,不能在这里显示)内有1个主页和3个iFrame。 主页上有一个计数器——我每秒读取一次计数器的值。 然后我有一个GUI,在那里我可以与QSlider交互,QSlider可以对3个iFrame中的一个进行更改

因此,我有一个GUI线程和另一个线程(例如,检查时间)

出现问题的地方: 如果QSlider信号发出,则被调用的函数将webdriver更改为特定帧(将_切换为()),当处于主页倒计时检查程序想要读取倒计时时,它找不到元素,因为webdriver不在主页上

代码示例

在这里,您可以看到两个函数相互干扰,因为它们是从两个不同的线程调用的:

1) 调用此函数是因为GUI发出信号。要更改网站上的特定元素,需要将webdriver切换到特定框架:

def单击_评级(驱动程序、帧、评级、滑块=无、值=无):
尝试:
driver.switch_to.frame(frame)//切换到特定帧
如果滑块为无或值为无:
对于范围(2,9)内的i:
驱动程序。按元素id(“OneChoiceQuestion”+str(i)+str(评级[i-2])查找元素。单击()
其他:
驱动程序。按\u id(“OneChoiceQuestion”+str(滑块+2)+str(值))查找\u元素。单击()
除无效辩论例外:
打印(“InvalidArgumentException错误:[已删除]。”)
最后:
driver.switch\u to.default\u content()//切换回
2) 定期调用此函数以检查倒计时计时器,但这取决于webdriver是否处于“default_content()”:

def get_passed_time_计数器(驱动程序):
尝试:
如果显示驱动程序。按id查找元素(“报警时钟”):
分钟=整数(驱动程序。通过id(“报警时钟”)查找元素。文本[11:13])
秒=整数(驱动程序。按id(“报警时钟”)查找元素。文本[14:16])
新建时间=180-((60*分钟)+秒)
返回新时间
除值错误外:
打印(“ValueError[update\u time]:无法更新时间。”)
返回错误
倒计时计时器不是唯一的问题,但可能是最好的解释。
因此,我不是在搜索“修补程序”,我只是在找到倒计时元素之前尝试查找它,而是在这种情况下查找一个结构,在这种情况下,它等待另一个线程使用特定的函数,我不希望它使用布尔标志,只要可能有一个“干净”的解决方案。

请询问或告诉我是否有信息缺失,或者是一个类似“不可能,因为你永远不应该做那样的事情”的主题。请询问或告诉我是否有信息缺失,或者是一个类似“不可能,因为你永远不应该做那样的事情”的主题。