如何解决重新加载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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。