【问题标题】:Hidden input Selenium Python in Div within TD在 TD 内的 Div 中隐藏输入 Selenium Python
【发布时间】:2022-01-14 06:52:21
【问题描述】:

背景
我正在尝试自动化网站数据输入;但是,对于附加的 HTML 部分,我还没有找到将值发送到字段“___33_xsde_6h_input__data”的方法。
我已经看到 Selenium 无法直接写入每个 the question 1the question 2question 3question 4 的隐藏字段。但是,我无法为我的场景找到具体的解决方案。
代码尝试
HTML

<td class="RND_Input" colspan="1"><div id="RND_generatedId_1" class="RND_FieldDecor">
<div class="RND_MII_Container">
<input type="hidden" name="___33_xsde_6h_input__data" value="RND:null-axxx"><input id="___33_xsde_6h_input__data" class="" type="text" 
value="[not defined]" autocomplete="off">
</div></div></td>


Python:
我已经尝试了大多数解决方案来查看是否能够设置元素,但没有运气

#Attempt 1 by Xpath
inputElement =ObjSelenium.find_element(By.XPATH,'//*[@id="___33_xsde_6h_input__data"]')
inputElement =ObjSelenium.find_element(By.XPATH,'.//input[@id="___33_xsde_6h_input__data"]'
    '/following-sibling::input[@type="hidden"]')
#Attempt 2 by CSS_SELECTOR 
inputElement=ObjSelenium.find_element(By.CSS_SELECTOR,'div.RND_Input>input[type=hidden]') 
inputElement=ObjSelenium.find_element(By.CSS_SELECTOR,'div.RND_MII_Container>input[type=hidden]')
#Attempt 3 by ID
js = "document.getElementById('___33_xsde_6h_input__data').value = 'text';"
ObjSelenium.execute_script(js)


问题
如何在 Selenium 驱动程序中设置 HTML 元素“___33_xsde_6h_input__data”以更新其值?

编辑: Undetectable Selenium 的答案抛出了以下(两种方法)

TimeoutException: Message: 
Stacktrace:
Backtrace:
    Ordinal0 [0x0039FDC3+2555331]
    Ordinal0 [0x003377F1+2127857]
    Ordinal0 [0x00232E08+1060360]
    Ordinal0 [0x0025E49E+1238174]
    Ordinal0 [0x0025E69B+1238683]
    Ordinal0 [0x00289252+1413714]
    Ordinal0 [0x00277B54+1342292]
    Ordinal0 [0x002875FA+1406458]
    Ordinal0 [0x00277976+1341814]
    Ordinal0 [0x002536B6+1193654]
    Ordinal0 [0x00254546+1197382]
    GetHandleVerifier [0x00539622+1619522]
    GetHandleVerifier [0x005E882C+2336844]
    GetHandleVerifier [0x004323E1+541697]
    GetHandleVerifier [0x00431443+537699]
    Ordinal0 [0x0033D18E+2150798]
    Ordinal0 [0x00341518+2168088]
    Ordinal0 [0x00341660+2168416]
    Ordinal0 [0x0034B330+2208560]
    BaseThreadInitThunk [0x76026359+25]
    RtlGetAppContainerNamedObjectPath [0x77B087A4+228]
    RtlGetAppContainerNamedObjectPath [0x77B08774+180]

【问题讨论】:

  • HTML 不完整。它仍然需要&lt;/div&gt;
  • @undetectedSelenium 谢谢,我以为它是剩菜之一,但我才意识到我的错误

标签: python html selenium


【解决方案1】:

解决方案:
问题是代码在另一个框架中,当我尝试更新我的 HTML 并意识到有 2 个正文标签时,我意识到了这一点。

所以为了激活正确的Xpath,我需要激活框架per this question

ObjSelenium.switch_to.frame(ObjSelenium.find_element(By.XPATH,"//iframe[@name='RND _SubSessioniFrame']")) 
#where RND_SubSessioniFrame is the name of the iframe element associated in the main HTML
inputElement =ObjSelenium.find_element(By.XPATH, '//*[@id="___33_xsde_6h_input__data"]')
inputElement.send_keys("Yay!")

如前所述,我没有在此处设置等待元素,因为我在执行以下操作之前已设置。

WebDriverWait(ObjSelenium, 10).until(ObjSeleniumExpectedConditions.presence_of_element_located((By.XPATH, '//*[@id="ButtonShowedAfterLoad"]'))) 

【讨论】:

    【解决方案2】:

    要将字符序列发送到您需要为element_to_be_clickable() 诱导WebDriverWait 的元素,您可以使用以下任一Locator Strategies

    • 使用CSS_SELECTOR

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td.RND_Input input[id*='input'][id$='data']"))).send_keys("Sgdva")
      
    • 使用XPATH

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@class='RND_Input']//input[contains(@id, 'input') and contains(@id, 'data')]"))).send_keys("Sgdva")
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      

    【讨论】:

    • 谢谢!但是我在使用这两种方法时都遇到了问题,我的问题已更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2022-10-06
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多