重新加载Web源代码,而无需使用Python Selenium刷新页面

问题描述

您好,我想问一下是否有任何方法可以刷新网站的源代码而不刷新页面。问题是当我加载页面http://107.170.101.241:8080/getTableColumn/并在其中放置一些信息时-您可以在下面的代码中看到,然后单击“分析”,其中显示了新的文本区域。我想从此textarea中获取文本,但是我不能,因为源代码“旧”,而xpath找不到它。最后一行代码是我要打印到控制台的内容。我尝试了time.sleep等,但没有任何帮助。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import time

chromedriver = "/usr/local/bin/chromedriver"
driver = webdriver.Chrome(chromedriver)

driver.get("http://107.170.101.241:8080/getTableColumn/")
time.sleep(1)

datab = driver.find_element_by_xpath("//select[@name='dbVendor']")
database = Select(datab)
database.select_by_visible_text("Sybase")

datab2 = driver.find_element_by_xpath("//select[@name='options']")
database2 = Select(datab2)
database2.select_by_visible_text("Show By SQL Clause")

txt = driver.find_element_by_xpath("//textarea[@name='sql']")
txt.clear()
txt.send_keys("select trd.M_NB as 'Trade_number' from CRD_TRADE_REP trd")

txt1 = driver.find_element_by_xpath("//textarea[@name='metadata']")
txt1.clear()
txt1.send_keys("CRD_TRADE_REP,M_NB")

analyze = driver.find_element_by_xpath("//input[@type='submit']")
analyze.send_keys("")
analyze.send_keys(Keys.RETURN)

#cant find this textarea below
out = driver.find_element_by_xpath("//textarea[@name='outputText']")

这是回溯:

Traceback (most recent call last):
  File "/Users/martinkubicka/Documents/fiverrgde.py",line 32,in <module>
    out = driver.find_element_by_xpath("//textarea[@name='outputText']")
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py",line 394,in find_element_by_xpath
    return self.find_element(by=By.XPATH,value=xpath)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py",line 976,in find_element
    return self.execute(Command.FIND_ELEMENT,{
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py",line 321,in execute
    self.error_handler.check_response(response)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py",line 242,in check_response
    raise exception_class(message,screen,stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//textarea[@name='outputText']"}
  (Session info: chrome=84.0.4147.135)

解决方法

在devtools中,如果从元素向上滚动,则可以看到输出文本区域嵌套在其中:

<iframe name="result" id="result" style="height: 180px; width: 800px;" scrolling="no" frameborder="0">

这些元素需要硒的额外处理。

在脚本结尾处尝试以下操作:


#Get the frame
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@name='result']")))

#wait for your object to be ready - i  use clickable as i like it
out = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//textarea[@name='outputText']")))

print(out.text)
#do stuff your stuff to the "out" element here

#when ready to go back to the main page content (not the iframe)
driver.switch_to_default_content()

当我使用添加的代码运行您的代码时,我得到输出:

表:tetSelect CRD_TRADE_REP(1,40)列:selectList CRD_TRADE_REP.M_NB(1,12)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...