从公共源(网站)多次下载,如何绕过 Javascript 触发的“单击确定按钮”?

从公共源(网站)多次下载,如何绕过 Javascript 触发的“单击确定按钮”?

我正在尝试从公共来源下载多个数据集,欧盟交易日志

我正在使用“分配/合规性”搜索工具(在左侧蓝色窗格中)。

从那里我必须选择一个国家并点击“搜索”。然后我可以访问各个年份(2010、2011、2012 等)。我想下载所有国家(28 个)和所有前几年(从 2005 年到 2013 年)的文件,这意味着至少有 252 个请求。

我试图弄清楚如何直接使用下载 URL。最终 URL(在本例中为 2010 年保加利亚的 URL)是下列

通过此 URL,我可以:

  • 删除“&installationAllowance=35266538”参数
  • 删除“®istryCodeLookup=Bulgaria”参数
  • 更改“&periodYear=2010”参数(更改参考日期)
  • 更改“®istryCode=BG”参数(以更改国家/地区)。

到目前为止我唯一的问题是每个链接都需要从下载页面进行验证(单击“确定”按钮)。

在页面的源代码中,我看到触发的函数如下:

<form name="export" method="POST" action="http://ec.europa.eu/environment/ets/export.do">

“确定”按钮代码如下:

<input type="submit" name="OK" value="Ok" class="FormButton" id="btnOK">

页面源代码中还有一个 JavaScript 块。

我如何批量下载这些文件?(我正在考虑创建一堆链接,用 RegEx 替换年份和国家,然后使用 Firefox 的“DownThemAll”扩展,并选择“从文件下载”)。

答案1

我肯定会考虑使用python 与模块调用

您可以轻松地自动执行任何浏览器操作(甚至可以无头地使用幻影JS)。

最简单的例子:

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

上面的代码将打开 python.org 网页,找到元素q,输入“pycon”,按回车键并检查是否返回任何结果。

您可以定义一些想要执行的动作链:

actions = ActionChains(driver)
actions.move_to_element(menu)
actions.click(hidden_submenu)
actions.perform()

当然,您可以找到必须点击的“确定”按钮:

button_ok = driver.find_element_by_id('button')

并点击它:

button_ok.click()

Xpath 也可以用来搜索给定的元素:/html/body/button

如果你对此解决方案感兴趣,请考虑查看文档它写得非常好,肯定能让你立即创建最终的解决方案。

相关内容