调用ng-click时如何从Selenium python下载文件

时间:2019-04-10 16:28:16

标签: javascript python angular selenium selenium-chromedriver

当试图单击用ng-click定义的按钮时,我试图模拟使用Selenium Python从网站下载文件。

HTML文件具有以下内容:

<div class="col-lg-6 btn-group">
  <br/>
  <br/>
  <input type="button" ng-click="exportToExcel('#exportable')" class="btn-text btn-link export-main" value="Export" />
</div>

在检查了不同的选项后,我输入的代码没有执行任何操作。

当我使用Selenium IDE时,记录的唯一步骤是“单击”“ css = btn-text”元素,并且可以使用,但是使用chrome驱动程序和Python中的Selenium时,不会下载任何内容。

我有此代码可确保Chrome驱动程序下载文件。 (我已经在其他网站上进行过测试,并且可以正常工作)

 options = webdriver.ChromeOptions()
          prefs = {'download.default_directory' : self.download_location,
              'download.prompt_for_download': False,
              'download.directory_upgrade': True,
              'safebrowsing.enabled': False,
              'safebrowsing.disable_download_protection': False}
          options.add_argument('--headless')
          options.add_experimental_option('prefs', prefs)
          driver = webdriver.Chrome(chrome_options=options, 
                                   service_args=['--verbose', '--log-path=/tmp    /chromedriver.log'])

这是我用来单击按钮以下载文件的代码:

export_button = WebDriverWait(self.webdriver,10).until(ec.visibility_of_element_located((By.CLASS_NAME, "export-main"))) 

 ActionChains(self.webdriver)\
  .click(export_button)\
  .move_to_element(export_button)\
  .perform()

我希望将指定文件夹中的excel文件下载到Chrome驱动程序,但是Selenium和Angular似乎不能很好地配合使用。

还有使用JavaScript调用“ ExportToExcel”函数的其他方法吗?

2 个答案:

答案 0 :(得分:0)

我自己无法测试,因为每个网站都不一样,因此您可以调用您要查询的javascript函数。 Selenium允许您从webdriver内轻松执行javascript。可以使用

driver.execute_script("exportToExcel('#exportable');")

我不知道这是否会下载您的文件,但这回答了您有关如何在webdriver中执行javascript的问题。同样,是否下载文件取决于其他许多情况,这些情况在没有更多信息的情况下无法从您的帖子中确定。

答案 1 :(得分:0)

我找到了问题的答案:

只需调用javascript以单击“导出按钮”,如下所示:

self.webdriver.execute_script("arguments[0].click();", export_button)