Python Selenium,执行通常在onclick上触发的ASP.NET AJAX

Python Selenium,执行通常在onclick上触发的ASP.NET AJAX,python,selenium,Python,Selenium,我有一个网页,我想在其中执行由onclick定义的操作,如下所示: onclick = "$find('ReportViewerControl').exportReport('CSV')" 通过在控制台中键入此命令,我通常可以在不单击引用onclick的标记的情况下执行此操作 在控制台中是否有我下载csv时通常会做的模拟输入 我根本没有ASP.Net的经验,这就是为什么我对所有关于如何处理该程序部分的上下文如此无知的原因。我只是尝试在python程序中自动检索此报告以进行解析 我能想到的唯一一

我有一个网页,我想在其中执行由onclick定义的操作,如下所示:

onclick = "$find('ReportViewerControl').exportReport('CSV')"
通过在控制台中键入此命令,我通常可以在不单击引用onclick的标记的情况下执行此操作

在控制台中是否有我下载csv时通常会做的模拟输入

我根本没有ASP.Net的经验,这就是为什么我对所有关于如何处理该程序部分的上下文如此无知的原因。我只是尝试在python程序中自动检索此报告以进行解析

我能想到的唯一一件事就是找到标记所在的元素并单击它,但没有结果,然后在窗口中执行我之前假设的javascript命令,其中包含:

browser.execute_script("$find('ReportViewerControl').exportReport('CSV')")
这产生了:

selenium.common.exceptions.JavascriptException: Message: javascript error: $find is not defined

你能试试这个让我知道吗

# Converted the jquery that you will run in the console as "downloadCSV" method
downloadCSV = "window.downloadCSV=function(){$find('ReportViewerControl').exportReport('CSV')}"
# load the method
driver.execute_script(downloadCSV)
# now run the method to execute your manual equivalent action
driver.execute_script("downloadCSV()")

您可以让Selenium单击元素。对于javascript,$通常意味着jQuery,因此如果该站点不使用它,请使用纯javascript,或者先注入jQuery。无论哪种方式,都将触发onclick事件。如果Selenium click不起作用,则可以在pageready状态之后添加onclick事件处理程序。如果是这样,请使用WebDriverWait生成click.@pcalkins根据我在问题中所述,我已经尝试过了,但文件没有下载。对于要加载的元素,我有一个特定的EC/WebDriverWait,然后单击不会产生任何结果,确定。。。看起来MS也在使用$符号。您的问题可能与初始化驱动程序和/或浏览器的方式有关。Headless?@pcalkins否,但当我单击指向此页面的“继续”按钮时,会打开一个新选项卡,因此我想我正在右选项卡上查找元素。如果打开一个新选项卡,则需要将Selenium驱动程序切换到该选项卡。浏览器。切换到窗口索引。。。你可以在这里使用1…你是说下载CSV吗?这在我使用它时起作用。是的,请尝试下载CSV。让我知道这是怎么回事。