Python selenium如何在带有参数的JavaScript元素上执行execute_script

2024-09-30 16:28:44 发布

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

我想从网站上下载文件。 当我在浏览器中检查元素时,我得到的结果是:

<td width="3%" align="left" id="tdvPDF0" colspan="3">
<a href="#" onclick="javaScript:downloadClicked('JRAOB2SNRXEAPX2', 0, 'PDF'); return false;" onmouseover="window.status='CTNF'; return true" onmouseout="window.status=''; return true">PDF</a>
/&nbsp;
<a href="#" onclick="javaScript:downloadClicked('JRAOB2SNRXEAPX2', 0, 'XML_LINK'); return false;" onmouseover="window.status='CTNF'; return true" onmouseout="window.status=''; return true">XML</a>
/&nbsp;
<a href="#" onclick="javaScript:downloadClicked('JRAOB2SNRXEAPX2', 0, 'DOCX'); return false;" onmouseover="window.status='CTNF'; return true" onmouseout="window.status=''; return true">DOCX</a>
</td>

我想下载这三个文档,即PDF、XML和DOCX。 这个JavaScript可以接受三个参数。在这种情况下,它们是: 1JRAOB2SNRXEAPX2(字符串) 20(整数) 三。PDF(字符串)

我不知道如何确定第一个参数的正确输入(在本例中为“JRAOB2SNRXEAPX2”)

我想让我的代码工作,不管第一个论点。在

以前,当我遇到JavaScript函数时,我使用了以下方法:

^{pr2}$

这通常是可行的,但是我从未遇到过像本例中那样带有参数的JavaScript,例如downloadclicted('JRAOB2SNRXEAPX2',0,'PDF')

我尝试了以下方法,但没有成功:

driver.execute_script(downloadClicked('JRAOB2SNRXEAPX2', 0, 'PDF'))
driver.execute_script(downloadClicked(''JRAOB2SNRXEAPX2', 0, 'PDF''))
driver.execute_script(downloadClicked('JRAOB2SNRXEAPX2', 0, 'PDF')); return false;

以及许多其他类似的选择。在

我也试过:

javascript = driver.find_element_by_id('tdvPDF0').click()
driver.execute_script(javascript)

此外,我还试过:

driver.find_element_by_id('tdvPDF0').click()

当前函数的代码如下所示:

def private_pair_ifw_downloader(driver, application_number, pause=1):
    private_pair_enter_application(driver, application_number)
    time.sleep(pause)
    driver.execute_script('submitTab("ifwtab")')
    time.sleep(pause)

    driver.execute_script('"javaScript:downloadClicked(''JRAOB2SNRXEAPX2', 0, 'PDF''); return false;"')

我希望代码调用JavaScript函数,而JavaScript函数又应该下载PDF文件,但是我收到了以下错误:

回溯(最近一次呼叫): 文件“C:/Workspaces/patents\u repo/USPTO_scraper/USPTO_private_pair”_刮板.py“,第41行,英寸 专用下载器(驱动程序“1572321”) 文件“C:\Workspaces\patents\u repo\utils\web_实用工具.py“,第211行,在私有的对ifw下载器中 driver.execute_脚本('“javaScript:下载已单击(“JRAOB2SNRXEAPX2”,0,“PDF”);返回false;“') 文件“C:\Users\eitan\Anaconda3\lib\site packages\selenium\webdriver\remote\网络驱动程序.py“,第636行,在execute_脚本中 “args”:已转换的\u args})['value'] 文件“C:\Users\eitan\Anaconda3\lib\site packages\selenium\webdriver\remote\网络驱动程序.py“,第321行,在execute中 self.error_处理程序.检查_响应(response) 文件“C:\Users\eitan\Anaconda3\lib\site packages\selenium\webdriver\remote\错误处理程序.py“,第242行,在check_response中 引发异常_类(消息、屏幕、stacktrace) selenium.common.异常.WebDriverException:消息:未知错误:运行时.evaluate引发异常:SyntaxError:意外的标识符 (会话信息:chrome=76.0.3809.100)


Tags: 文件pyfalsetrueexecutereturnpdfdriver
2条回答

您所要做的就是用双引号将您的输入包装起来以执行_脚本。在

driver.execute_script("downloadClicked('JRAOB2SNRXEAPX2', 0, 'PDF');")

如果您不知道字符串,可以尝试以下方法:

driver.execute_script('document.querySelector("a[onclick*=PDF]").onclick()')

相关问题 更多 >