Overview Fetching data from a web page through Squish is in most cases done piece by piece, which can make retrieving larger amounts of data (for example the complete contents of a table) relatively slow.
The following script demonstrates different ways to retrieve data and provides the times each of these takes to execute for an example web page.
Example Script Please note: For get_table_data4()
and get_table_data5()
the file
squish_getTableData.js
(contains helper functions used in get_table_data4()
and get_table_data5()
) must be placed in <SQUISH_DIR>/lib/extensions/web
.
import os
import sys
import json
import time
def main ():
loadUrl ( "https://download.froglogic.com/support/table_rows_50_columns2.html" )
test_count = 3
for i in range ( test_count ):
get_table_data1 ( "thetable" )
for i in range ( test_count ):
get_table_data2 ( "thetable" )
for i in range ( test_count ):
get_table_data3 ( "thetable" )
for i in range ( test_count ):
get_table_data4 ( "thetable" )
for i in range ( test_count ):
get_table_data5 ( "thetable" )
def get_table_data1 ( table ):
obj = waitForObject ( table )
start_time = time . time ()
rows = obj . rowCount
columns = obj . columnCount
for i in range ( rows ):
for j in range ( columns ):
obj . cellAt ( i , j ) . innerText
t = time . time () - start_time
test . log ( "get_table_data1(): %.2f \n\n " % t )
def get_table_data2 ( table ):
obj = waitForObject ( table )
id = obj . id
start_time = time . time ()
rows = obj . rowCount
columns = obj . columnCount
for i in range ( rows ):
for j in range ( columns ):
s = evalJS ( 'document.getElementById(" %s ").rows[ %s ].cells[ %s ].innerText' % ( id , i , j ))
t = time . time () - start_time
test . log ( "get_table_data2(): %.2f \n\n " % t )
def get_table_data3 ( table ):
obj = waitForObject ( table )
id = obj . id
start_time = time . time ()
rows = obj . rowCount
columns = obj . columnCount
for i in range ( rows ):
for j in range ( columns ):
evalJS ( 'document.getElementById(" %s ").rows[ %s ].children[ %s ].innerText' % ( id , i , j ))
t = time . time () - start_time
test . log ( "get_table_data3(): %.2f \n\n " % t )
def get_table_data4 ( table ):
if evalJS ( 'typeof squish_getTableDataAsObject == "function"' ) == "false" :
test . fail ( "Function squish_getTableDataAsObject does not exist; maybe squish_getTableData.js has not been installed in " + os . environ [ "SQUISH_PREFIX" ] + "/lib/extensions/web?" )
return
obj = waitForObject ( table )
id = obj . id
start_time = time . time ()
o = retrieveJSObject ( 'squish_getTableDataAsObject(document.getElementById(" %s "))' % id )
rows = o . property ( "rowCount" )
columns = o . property ( "columnCount" )
for i in range ( rows ):
for j in range ( columns ):
o . property ( " %s / %s " % ( i , j ))
t = time . time () - start_time
test . log ( "get_table_data4(): %.2f \n\n " % t )
def get_table_data5 ( table ):
if evalJS ( 'typeof squish_getTableDataObjectAsJSON == "function"' ) == "false" :
test . fail ( "Function squish_getTableDataObjectAsJSON does not exist; maybe squish_getTableData.js has not been installed in " + os . environ [ "SQUISH_PREFIX" ] + "/lib/extensions/web?" )
return
obj = waitForObject ( table )
id = obj . id
start_time = time . time ()
json_str = evalJS ( 'squish_getTableDataObjectAsJSON(document.getElementById(" %s "))' % id )
o = json . loads ( json_str )
rows = o [ "rowCount" ]
columns = o [ "columnCount" ]
for i in range ( rows ):
for j in range ( columns ):
o [ " %s / %s " % ( i , j )]
t = time . time () - start_time
test . log ( "get_table_data5(): %.2f \n\n " % t )
test.py Results Example results (consider relative differences, not absolute values!):
get_table_data1(): 7.30
get_table_data1(): 7.37
get_table_data1(): 7.41
get_table_data2(): 3.60
get_table_data2(): 3.60
get_table_data2(): 3.77
get_table_data3(): 3.75
get_table_data3(): 3.65
get_table_data3(): 3.63
get_table_data4(): 3.85
get_table_data4(): 3.74
get_table_data4(): 3.61
get_table_data5(): 0.03
get_table_data5(): 0.03
get_table_data5(): 0.05
Copyright © 2024 The Qt Company Ltd. All rights reserved.
Privacy Policy Usage Data Processing by Google We would like to use Google Analytics to get a better understanding of how
you use the website.
By agreeing to this, your usage data will be stored in the USA and processed
by Google LLC. Both Google as well as federal US agencies can access this data
and combine it with any other data about you, such as your search history,
personal accounts or any other data known to Google.
See our privacy
policy to toggle this feature and to learn more, or contact
us .