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

时间:2020-08-13 08:56:33

标签: python selenium selenium-webdriver error-handling automation

我正在尝试使某些网页自动化并遇到以下错误: 我已经通过了登录屏幕,该屏幕没有任何问题,但是在重定向到下一页后,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()

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

与您的代码无关的不是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')]")))