【问题标题】:Selenium cannot find element even after giving a high implicitly waiting time即使在隐式等待时间很高之后,Selenium 也无法找到元素
【发布时间】:2020-12-03 02:11:36
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 确实存在,可以在浏览器的检测页面看到
    • 有时当您手动访问该站点并对其进行检查时,该元素是存在的。但是,在自动化执行期间,它可能不是。您可以尝试的另一件事是在执行时暂停或休眠并检查站点。如果您能找到该元素,请告诉我。
    【解决方案2】:

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

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

    上面的代码显示 webdriver 将等待页面中的元素。

    【讨论】:

    • 不幸的是它不起作用,由于此函数的超时异常,我收到以下错误:文件,第 19 行,在 (By.XPATH, '//*[@id= ""]"'))) 文件 "",第 80 行,直到引发 TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:
    【解决方案3】:

    您的代码的问题不是等待,而是正确的元素定位器。据我所见,从您提供的有限 HTML DOM 中,您想要在变量 ma​​t 中定位的元素的部分名称和 id 正在发生变化。您可以使用下面的代码找到您的元素(我还包含了更复杂的方法来等待元素加载)。

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

    【讨论】:

      猜你喜欢
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 2018-05-20
      相关资源
      最近更新 更多