使用python-selenium无法定位浏览器中显示的文本



我有一个网页,它有两个框架标题栏(source=nawbar.html(和大型机(source=mainpage.html(。最初切换到标题栏框架,识别文本框并提交值。提交后,它重定向到以大型机为目标的新页面(现在大型机有archivedata.php(。现在,如果我试图切换到大型机,它会抛出以下错误

driver.frame=driver.find_element_by_xpath('//frame[@name="大型机"]'(***selenium.com.mon.exceptions.NoSuchElementException:消息:没有这样的元素:找不到元素:{"方法":"xpath","选择器":"//帧[@name=&"大型机"]&"}

所以在代码中添加了以下行

driver.switch_to_default_content()

现在我可以切换到大型机,但如果我打印页面源,它会显示mainpage.html的内容,该内容在表单提交之前最初加载页面时存在于大型机中。我需要验证archivedata.php源中的文本,该文本在表单提交后显示在浏览器中。但是使用python硒无法获得archivedata.php 的来源

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import re
options = webdriver.ChromeOptions()
options.add_argument('ignore-certificate-errors')
testcase_list= ['1111']
driver = webdriver.Chrome('./chromedriver',chrome_options=options)
driver.get("https://xxxx.php")
search_bar = driver.find_element_by_id("username")
search_bar.clear()
search_bar.send_keys("xxxxx")
search_bar = driver.find_element_by_id("password")
search_bar.clear()
search_bar.send_keys("xxxxxx")
search_bar.send_keys(Keys.RETURN)
time.sleep(10)
frame = driver.find_element_by_xpath('//frame[@name="titlebar"]')
driver.switch_to.frame(frame)
search_bar = driver.find_element_by_name("targetTestCase")
search_bar.clear()
for case_id in testcase_list:
search_bar.send_keys(case_id)
search_bar.send_keys(Keys.RETURN)
driver.switch_to_default_content()
frame = driver.find_element_by_xpath('//frame[@name="mainframe"]')
driver.switch_to.frame(frame)
src = driver.page_source
text_found = re.search(r'Scripted', src)
print(src)
if text_found:
print("Present")
else:
print("not present") 

page_source不是一个非常可靠的方法来获取HTML,因为您现在面临着很多问题。因为它不能保证返回页面的当前状态。一个更好、更可靠的方法是使用JavaScript获取outerHTML。

src = driver.execute_script("return document.documentElement.outerHTML")
text_found = re.search(r'Scripted', src)
print(src)

最新更新