如何通过重新运行javascript来使用selenium刷新页面的一部分

2024-09-25 00:24:49 发布

您现在位置:Python中文网/ 问答频道 /正文

该页的硬编码限制设置为25。页面的这个动态部分似乎是由一个名为qmodloader.js的javascript生成的,该javascript最终会调用trades.js

页面为https://web.tmxmoney.com/quote.php?qm_symbol=enb

我发现这个部分定义了脚本

<script
id="qmod"
type='application/javascript'
data-qmod-wmid='101020'
data-qmod-env="app"
src="https://qmod.quotemedia.com/js/qmodLoader.js"
></script>

qmodLoader.js似乎将窗口作为输入参数

(function (window) {
 'use strict';
var qMod = {};
var qmLoader = {};
var qmodScriptEl = document.getElementById('qmod') || console.log('QMOD: Error. Unable to find QMOD Script ID.');
var wmid = qmodScriptEl.getAttribute('data-qmod-wmid') || console.log('QMOD: Error. Unable to find Webmaster ID on, QMOD Script ID.');
var qTools = document.getElementsByClassName('qtool') || console.log('QMOD: Error. No QMOD tools found.');

var qmodVersion = qmodScriptEl.getAttribute('data-qmod-version') || 'v1.18.0';
var qModVersionType = testVersion(qmodVersion);
.....

trades.js的api端点如下所示。有限制是50,这是我想要的更多

apiEndPoints:[{name:"getRecentTradesBySymbol.json",params:{symbol:"GOOGL",tradeIndDesc:"true",limit:50,timezone:!0,tradesummary:!0,tradeExchangeName:!0}},
          {name:"getQuotes.json",params:{symbols:"GOOGL",afterhours:!0,timezone:!0,premarket:!0,currencyInd:!0,countryInd:!0,marketstatus:!0}}]

页面中的硬编码值位于div class="qtool" and are data-qmod-params='{ "symbol" : "ENB", "limit" : 25 }'

在selenium中,我做了以下工作

from selenium import webdriver
import time
driver = webdriver.Firefox()

driver.set_page_load_timeout(60)
driver.get("https://web.tmxmoney.com/quote.php?qm_symbol=ENB")
wnd = driver.current_window_handle
grab_script = driver.find_element_by_xpath("""//*[@id="qmod"]""").text
driver.execute_script(grab_script,wnd)

这只是为了在我开始尝试使用js更改页面中的参数之前,尝试将脚本作为初始测试重新加载。遗憾的是,这不起作用。我当前收到以下错误:

/home/stillFoolish/PycharmProjects/WStest/venv/bin/python /home/stillFoolish/PycharmProjects/WStest/test/Test1.py
Traceback (most recent call last):
  File "/home/stillFoolish/PycharmProjects/WStest/test/Test1.py", line 15, in <module>
    driver.execute_script(grab_script,"wnd")
  File "/home/stillFoolish/PycharmProjects/WStest/venv/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 636, in execute_script
    'args': converted_args})['value']
  File "/home/stillFoolish/PycharmProjects/WStest/venv/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/home/stillFoolish/PycharmProjects/WStest/venv/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: invalid type: map, expected a string at line 1 column 28

好的,我已经按照Y.Berrama的指示更正了上面的代码。我不再有错误,它运行到完成,但我希望重新加载的页面部分没有改变

知道我哪里出错了吗


Tags: pyhomedatavardriverseleniumjsscript