硒即使提供了很高的隐式等待时间也无法找到元素

问题描述

我正在尝试使某些网页自动化并遇到以下错误: 我已经通过了登录屏幕,该屏幕没有任何问题,但是在重定向下一页后,python给出了以下错误

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:

我试图通过引入driver.implicitly.waittime.sleepwebdriverwait(driver,time).until(EC.presence_of_element_located((By.ID,"myDynamicElement"))函数来修复它,但是所有选项似乎都不起作用。

我在下面显示了相关的HTML代码

<input type="Text" class="urEdf2TxtEnbl" autocomplete="off" id="DLG_VARIABLE_vsc_CommonVariablesList_VAR_5_VARINPUT_inp" ct="I" name="DLG_VARIABLE_vsc_CommonVariablesList_VAR_5_VARINPUT_inp" st="" tp="STRING" value="502309" onchange="sapUrMapi_InputField_change('DLG_VARIABLE_vsc_CommonVariablesList_VAR_5_VARINPUT_inp',event);" onblur="sapUrMapi_InputField_Blur('DLG_VARIABLE_vsc_CommonVariablesList_VAR_5_VARINPUT_inp',event);" onkeydown="sapUrMapi_InputField_keydown('DLG_VARIABLE_vsc_CommonVariablesList_VAR_5_VARINPUT_inp',event);" onkeyup="sapUrMapi_InputField_KeyUp('DLG_VARIABLE_vsc_CommonVariablesList_VAR_5_VARINPUT_inp',event);" onfocus="sapUrMapi_InputField_focus('DLG_VARIABLE_vsc_CommonVariablesList_VAR_5_VARINPUT_inp',event);" onselectstart="sapUrMapi_InputField_onselectstart('DLG_VARIABLE_vsc_CommonVariablesList_VAR_5_VARINPUT_inp',event);">

周围区域的HTML代码如下所示:

<input type="Text" class="urEdf2TxtEnbl" autocomplete="off" id="DLG_VARIABLE_vsc_CommonVariablesList_VAR_4_VARINPUT_inp" ct="I" name="DLG_VARIABLE_vsc_CommonVariablesList_VAR_4_VARINPUT_inp" st="" tp="STRING" value="" onchange="sapUrMapi_InputField_change('DLG_VARIABLE_vsc_CommonVariablesList_VAR_4_VARINPUT_inp',event);" onblur="sapUrMapi_InputField_Blur('DLG_VARIABLE_vsc_CommonVariablesList_VAR_4_VARINPUT_inp',event);" onkeydown="sapUrMapi_InputField_keydown('DLG_VARIABLE_vsc_CommonVariablesList_VAR_4_VARINPUT_inp',event);" onkeyup="sapUrMapi_InputField_KeyUp('DLG_VARIABLE_vsc_CommonVariablesList_VAR_4_VARINPUT_inp',event);" onfocus="sapUrMapi_InputField_focus('DLG_VARIABLE_vsc_CommonVariablesList_VAR_4_VARINPUT_inp',event);" onselectstart="sapUrMapi_InputField_onselectstart('DLG_VARIABLE_vsc_CommonVariablesList_VAR_4_VARINPUT_inp',event);">

我想做的是更改值:value="502309"。参见下面的完整代码

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import webdriverwait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('xxxx')
login = driver.find_element_by_xpath('xxx')
login.send_keys('xxx')
passw = driver.find_element_by_xpath('xxx')
passw.send_keys('xxx')
button = driver.find_element_by_xpath('xxx')
button.click()
driver.maximize_window()  

driver.implicitly_wait(120)

mat = driver.find_element_by_id('DLG_VARIABLE_vsc_CommonVariablesList_VAR_2_VARINPUT_inp')




driver.close()

解决方法

尝试使用beautifulsoup打印html,以便您可以检查元素是否确实存在。有关如何使用它的参考,请参阅link

,

我不知道这是否有帮助,但是我遇到了同样的问题,并通过以下方法解决了这个问题:

searchbox = WebDriverWait(driver,10).until(
        EC.visibility_of_element_located(
            (By.XPATH,"your_xpath_here")

上面的代码显示,网络驱动程序将等待页面中的元素。

,

与您的代码无关的不是wait,而是正确的元素定位符。据我所提供的有限HTML DOM所见,要在变量 mat 中定位的元素的名称和ID的一部分正在更改。您可以使用以下代码找到您的元素(另外,我还提供了更复杂的方式来等待元素加载)。

mat = WebDriverWait(driver,120).until(EC.presence_of_element_located((By.XPATH,"//input[starts-with(@id,'DLG_VARIABLE_vsc_CommonVariablesList_VAR')]")))