Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 程序没有完成任务就结束了_Python 3.x_Loops_Selenium_While Loop - Fatal编程技术网

Python 3.x 程序没有完成任务就结束了

Python 3.x 程序没有完成任务就结束了,python-3.x,loops,selenium,while-loop,Python 3.x,Loops,Selenium,While Loop,当我运行脚本时,它在完成while循环中的任务之前结束 driver = webdriver.Chrome() driver.get('http://example.com') #input("Press any key to continue1") s_b_c_status = "False" while s_b_c_status == "True": try: if(driver.find_element_by_xpath("//div[@role='button'

当我运行脚本时,它在完成
while
循环中的任务之前结束

driver = webdriver.Chrome()
driver.get('http://example.com')
#input("Press any key to continue1")
s_b_c_status = "False"
while s_b_c_status == "True":
    try:
        if(driver.find_element_by_xpath("//div[@role='button' and @title='Status']")):
            s_b_c_status = "True"
    except NoSuchElementException:
        s_b_c_status = "False"
if(s_b_c_status == "True"):
    print("Scanning Done!")
else:
print("Error")
由于我的站点没有该元素,它应该总是打印
错误
,但当我运行代码时,它只打印一次
错误
(尽管它在
循环时被选中)

我到底需要什么:
脚本应该检查元素是否存在,直到元素存在,然后运行rest代码。

您的代码在逻辑上有一个明显的缺陷:

s_b_c_status = "False"
while s_b_c_status == "True"
您已将
s\u b\u c\u状态定义为
“False”
,因此您的
while
循环甚至不会执行单个迭代

如果需要等待元素出现在DOM中,请尝试实现:


您的代码在逻辑上有一个明显的缺陷:

s_b_c_status = "False"
while s_b_c_status == "True"
您已将
s\u b\u c\u状态定义为
“False”
,因此您的
while
循环甚至不会执行单个迭代

如果需要等待元素出现在DOM中,请尝试实现:


在元素出现之前通常需要等待多长时间?在10-20秒之间,我不想使用
time.sleep()
这里…@Rabe我认为用例中有一点混乱,正如你提到的
我的站点没有元素,它应该总是打印错误
,但后来你提到
检查元素是否存在,直到元素存在为止
,所以主要问题是元素是否存在?如果是这样的话,你对元素的下一步行动是什么?解决方案将取决于该条件。元素将100%确定在那里,但它在出现多长时间后不会固定,因为这将取决于用户的互联网速度…@Rabe好的,那么您对元素的下一步操作是什么?检索某些属性(例如文本)或调用click()?通常需要等待多长时间才能显示元素?在10-20秒之间,我不想使用
time.sleep()
这里…@Rabe我认为用例中有一点混乱,正如你提到的
我的站点没有元素,它应该总是打印错误
,但后来你提到
检查元素是否存在,直到元素存在为止
,所以主要问题是元素是否存在?如果是这样的话,你对元素的下一步行动是什么?解决方案将取决于该条件。元素将100%确定在那里,但它在出现多长时间后不会固定,因为这将取决于用户的互联网速度…@Rabe好的,那么您对元素的下一步操作是什么?检索某些属性(例如文本)或调用click()?20是什么意思?它会一直检查到20秒或20秒后?如果在20秒内找不到,我们怎么能给出消息?@Rabe,意思是最多等待20秒,让元素出现在DOM中。如果元素未出现,将引发
TimeoutException
。检查更新的应答如果在2秒钟内找到元素,那么它也将等待20秒,或者在2秒钟后继续?@Rabe在2秒钟后继续。如果我在
同时
循环得到解决方案,我将非常感激,以供我将来参考…20是什么意思?它会一直检查到20秒或20秒后?如果在20秒内找不到,我们怎么能给出消息?@Rabe,意思是最多等待20秒,让元素出现在DOM中。如果元素未出现,将引发
TimeoutException
。检查更新的应答如果在2秒内找到元素,那么它也将等待20秒或在2秒后继续?@Rabe在2秒后继续。如果我在
的同时
循环得到解决方案,我将不胜感激,以备将来参考。。。