Selenium returns 空文本而不是实际值
Selenium returns empty text instead of the actual value
我正在尝试获取 iframe 中的值。这是我卡住的部分
<input tabindex="20" class="dxeEditArea dxeEditAreaSys" name="txt_CADDE_SOKAK_KODU" value="1009" maxlength="8" id="txt_CADDE_SOKAK_KODU_I" onchange="ASPx.EValueChanged('txt_CADDE_SOKAK_KODU')" onblur="ASPx.ELostFocus('txt_CADDE_SOKAK_KODU')" onfocus="ASPx.EGotFocus('txt_CADDE_SOKAK_KODU')" type="text" style="text-align:Left;" autocomplete="off">
我试过使用,但到目前为止没有成功。
driver.find_element_by_id("txt_CADDE_SOKAK_KODU_I").get_attribute("innerText"))
driver.find_element_by_id("txt_CADDE_SOKAK_KODU_I").get_attribute("value"))
它只是returns我的空字符串。
这里还有完整的 xpath :
/html/body/form/div[4]/fieldset/div[4]/table[14]/tbody/tr/td[1]/input
编辑2:
我发现如果我检查页面我可以看到值,但是如果我使用这样的代码从 innerHtml 中获取值
print(driver.find_element_by_id("txt_MAHALLE").get_attribute("innerHTML"))
它不作为值存在。
尝试显式等待 :- 您需要像下面那样切换到 iframe,如果 ID txt_CADDE_SOKAK_KODU_I
是唯一的,您可以获得这样的 value
属性:
wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.NAME, "MIframe1")))
print(wait.until(EC.visibility_of_element_located((By.ID, "txt_CADDE_SOKAK_KODU_I"))).get_attribute('value'))
进口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
作为参考,我在提问之前已经切换到 iframe,否则我将无法向页面发送输入并且页面不会 return 我的结果。我无法共享代码,但工作流程就像,单击一些链接以访问 iframe 并将输入发送到 iframe 内的框,然后单击按钮以获取结果并复制结果。
我能够解决我的问题,方法是先让 time.sleep(10)
等待,然后使用
分配等待直到页面中的所有元素都可见
WebDriverWait(driver, 150).until(EC.visibility_of_element_located((By.ID, "the element"))).
之后我使用
访问了所有元素
driver.find_element_by_id("the element").get_attribute("value")
我正在尝试获取 iframe 中的值。这是我卡住的部分
<input tabindex="20" class="dxeEditArea dxeEditAreaSys" name="txt_CADDE_SOKAK_KODU" value="1009" maxlength="8" id="txt_CADDE_SOKAK_KODU_I" onchange="ASPx.EValueChanged('txt_CADDE_SOKAK_KODU')" onblur="ASPx.ELostFocus('txt_CADDE_SOKAK_KODU')" onfocus="ASPx.EGotFocus('txt_CADDE_SOKAK_KODU')" type="text" style="text-align:Left;" autocomplete="off">
我试过使用,但到目前为止没有成功。
driver.find_element_by_id("txt_CADDE_SOKAK_KODU_I").get_attribute("innerText"))
driver.find_element_by_id("txt_CADDE_SOKAK_KODU_I").get_attribute("value"))
它只是returns我的空字符串。
这里还有完整的 xpath :
/html/body/form/div[4]/fieldset/div[4]/table[14]/tbody/tr/td[1]/input
编辑2:
我发现如果我检查页面我可以看到值,但是如果我使用这样的代码从 innerHtml 中获取值
print(driver.find_element_by_id("txt_MAHALLE").get_attribute("innerHTML"))
它不作为值存在。
尝试显式等待 :- 您需要像下面那样切换到 iframe,如果 ID txt_CADDE_SOKAK_KODU_I
是唯一的,您可以获得这样的 value
属性:
wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.NAME, "MIframe1")))
print(wait.until(EC.visibility_of_element_located((By.ID, "txt_CADDE_SOKAK_KODU_I"))).get_attribute('value'))
进口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
作为参考,我在提问之前已经切换到 iframe,否则我将无法向页面发送输入并且页面不会 return 我的结果。我无法共享代码,但工作流程就像,单击一些链接以访问 iframe 并将输入发送到 iframe 内的框,然后单击按钮以获取结果并复制结果。
我能够解决我的问题,方法是先让 time.sleep(10)
等待,然后使用
WebDriverWait(driver, 150).until(EC.visibility_of_element_located((By.ID, "the element"))).
之后我使用
访问了所有元素driver.find_element_by_id("the element").get_attribute("value")