硒;Send_keys将字段空,没有错误



这里完全是新手。我正在自动化用于"不符合"票的表单,并且我正在成功地填充所有文本字段,除了一个。问题是,我没有收到任何错误信息。代码一直到最后,但留下一个文本字段为空。该文本框是票据的主体,用于描述问题,因此我无法绕过不使用它的方法。

下面是我最初写的代码:

print(desc_to_write) #Use while debuggin this to confirm the variable contain the string.
desc = web.find_element_by_xpath('/html/body')
desc.send_keys(desc_to_write)
#No error but still nothing in the browser text field. 

xpath是我用Chrome的"复制xpath"工具得到的。

我也尝试了以下方法,但没有成功(相关的注释是收到的错误)。

# 1:

desc = web.find_element_by_class_name('editor_body')
desc.send_keys(desc_to_write)
#selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".editor_body"}

# 2:

desc = web.find_element_by_css_selector('body.editor_body')
desc.send_keys(desc_to_write)
#NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"body.editor_body"}

# 3:

desc = web.find_element_by_xpath('/html/body')
desc.click()
time.sleep(5)
desc.send_keys(desc_to_write)
#No error but still nothing in the browser text field. 

#4:我也尝试过完整的Xpath,但没有成功。我不得不自己猜测完整路径,因为"复制完整Xpath"工具将返回与上面相同的路径。我使用"iframe"的Xpath并添加"/html/body"获得了大部分路径。请注意,我对HTML一无所知,所以我可能在某个地方犯了错误。这是一次绝望的尝试。

desc = web.find_element_by_xpath('//*[@id="NewRequestTab"]/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[1]/td/table/tbody/tr[14]/td[2]/div/iframe/html/body')
desc.send_keys(desc_to_write)

结果错误是:

#selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="NewRequestTab"]/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[1]/td/table/tbody/tr[14]/td[2]/div/iframe/html/body"}  (Session info: chrome=88.0.4324.104)

我还附上了在Chrome的开发人员工具中看到的代码的屏幕截图。我可以复制实际的代码,但老实说,我知道HTML是如何工作的,我不知道什么是相关的。如果需要,我可以提供更多。突出显示的部分是Chrome开发工具中的检查器工具的结果。

谢谢你的帮助!

HTML代码

您必须切换到iframe,以便将其内容与selenium一起使用。最好的方法是先等待它出现,然后切换:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 300)
wait.until(EC.frame_to_be_available_and_switch_to_it(driver.find_element(By.CLASS_NAME, 'textarea')))

我根据John的回答做了一些研究,发现了以下类似问题的答案。然后我想到了

web.switch_to.frame(web.find_element_by_xpath('//*[@id="NewRequestTab"]/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[1]/td/table/tbody/tr[1]/td/table/tbody/tr[14]/td[2]/div/iframe'))
desc = web.find_element_by_class_name('editor_body')
desc.click()
desc.send_keys(desc_to_write)
web.switch_to.default_content()

现在一切都好。谢谢!

相关内容

  • 没有找到相关文章

最新更新