如何自动下载报表

前言:存在的问题

现在日常工作中,有不少人需要每天下载报表,然后整理成需要的格式,如:每日销售报表,每月经营分析报告的基础数据的各种报表,手工整理工作量大,心情也容易受到影响。如果能自动下载报表,并用python或者VBA自动整理成所需要的报表,则效率和准确性都将会有大幅度的提升。


一、安装python

……

二、安装vs_code

……

三、安装selenium 

……

四、写自动下载的代码 

……


五、总结

自动化下载数据,然后进行自动化的报表加工,可以高效率准确的一键得到想要的结果。

六、实际工作中可能存在的问题

在统一登陆门户后能够成功点击某个系统的按钮,但接下来点击某个功能模块的按钮失败的情况,可能由以下几个原因造成:

  1. 元素定位问题
    • 功能模块的按钮可能使用了不同或更复杂的定位方式(如XPath、CSS选择器),导致Selenium无法准确找到该元素。
    • 检查并确认用于定位按钮的选择器是否正确无误,可以通过在浏览器的开发者工具中手动验证这些选择器。
  2. 页面加载问题
    • 点击系统按钮后,页面可能发生了部分或完全的重载,功能模块按钮尚未加载完成或渲染到DOM中。
    • 使用显式等待(Explicit Wait)来确保在尝试点击之前,功能模块按钮已经完全加载并处于可交互状态。
  3. 元素被遮挡
    • 功能模块的按钮可能被其他元素(如弹窗、广告、覆盖层等)遮挡,导致Selenium无法直接点击。
    • 尝试使用JavaScript执行点击操作,或者使用Selenium的Actions类来模拟鼠标操作,绕过遮挡元素。
  4. 按钮状态问题
    • 功能模块的按钮可能处于禁用(disabled)或不可点击状态,这可能是由于页面逻辑或用户权限等原因造成的。
    • 检查按钮的HTML属性和CSS样式,确认其是否可点击。如果按钮确实处于禁用状态,可能需要等待其变为可点击状态后再进行操作。
  5. 页面跳转或iframe问题
    • 点击系统按钮后,页面可能发生了跳转或加载了新的iframe,而Selenium的上下文(如当前窗口或iframe)没有相应更新。
    • 使用Selenium的switch_to方法切换到正确的窗口或iframe,然后再尝试点击功能模块按钮。
  6. JavaScript事件问题
    • 功能模块的按钮可能通过JavaScript事件而非标准的点击事件来触发操作。
    • 在这种情况下,可以尝试使用Selenium的execute_script方法来执行相应的JavaScript代码,模拟按钮的点击操作。
  7. Selenium或浏览器驱动问题
    • 确保Selenium和浏览器驱动的版本兼容,并且都是最新版本。
    • 检查是否有任何已知的Selenium或浏览器驱动的bug与当前遇到的问题相关。
  8. 网络或环境问题
    • 网络延迟或不稳定可能导致页面元素加载缓慢或失败。
    • 检查网络连接,确保在测试过程中网络稳定且速度足够快。

综上所述,要解决这个问题,需要仔细检查元素定位、页面加载状态、元素遮挡情况、按钮状态、页面跳转或iframe切换、JavaScript事件处理以及Selenium和浏览器驱动的配置等多个方面。通过逐步排查和测试,可以定位问题的具体原因并采取相应的解决措施。

七、尝试用“JavaScript事件”处理,尝试失败

尝试用下面的方法解决问题,尝试失败。

JavaScript事件问题: 功能模块的按钮可能通过JavaScript事件而非标准的点击事件来触发操作。 在这种情况下,可以尝试使用Selenium的execute_script方法来执行相应的JavaScript代码,模拟按钮的点击操作。 请详细解释,并给出示例代码。:

在Web开发中,许多交互操作并不直接通过HTML元素的点击事件来处理,而是通过JavaScript绑定到元素上的自定义事件或特定行为。当使用Selenium进行自动化测试时,如果标准的点击方法(如click())不起作用,很可能是因为按钮的点击实际上是通过JavaScript来实现的。

为了模拟这种通过JavaScript触发的点击操作,Selenium提供了execute_script方法,允许你直接在浏览器上下文中执行JavaScript代码。这种方法可以用来模拟各种JavaScript事件,包括点击事件。

示例代码

假设你有一个按钮,其HTML可能如下所示,但实际的点击行为是通过JavaScript的某个函数来处理的:

html复制代码
<button id="myButton" onclick="javascriptFunction()">点击我</button>

但在实际情况中,可能并没有onclick属性,而是使用了addEventListener或其他方式在JavaScript中绑定了事件。

使用execute_script模拟点击

你可以通过Selenium的execute_script方法来模拟点击这个按钮。如果你知道直接触发点击的JavaScript函数名(比如javascriptFunction),你可以直接调用它,但这通常不是最佳实践,因为它依赖于内部实现细节。

更通用的方法是模拟一个点击事件。以下是一个使用execute_script来模拟点击事件的示例:

python复制代码
from selenium import webdriver
# 假设driver是你的WebDriver实例
driver = webdriver.Chrome()
# 打开包含目标按钮的页面
driver.get("http://example.com")
# 使用execute_script来模拟点击
# 首先,通过JavaScript获取到按钮元素
# 然后,创建一个点击事件,并触发它
button_id = "myButton" # 假设按钮的ID是"myButton"
script = f"""
var button = document.getElementById('{button_id}');
if (button) {{
var event = new MouseEvent('click', {{
'view': window,
'bubbles': true,
'cancelable': true
}});
button.dispatchEvent(event);
}}
"""
driver.execute_script(script)
# 接下来可以添加其他操作或断言来验证点击效果

在这个示例中,我们首先使用document.getElementById获取了按钮元素。然后,我们创建了一个新的MouseEvent对象,并设置了它的typeclick,以及一些其他属性(如bubblescancelable)。最后,我们使用dispatchEvent方法将事件派发到按钮上,模拟了一个点击操作。

请注意,这种方法依赖于能够访问和修改页面的DOM和JavaScript上下文,因此它适用于大多数基于Web的自动化测试场景。然而,如果页面使用了复杂的JavaScript框架(如React、Vue等),并且其事件处理逻辑被封装在框架内部,那么直接调用框架的API或方法可能更为合适,但这通常超出了Selenium的能力范围,并可能需要额外的工具或库来支持。

八、求指导 

到目前卡住了,感觉原因可能是这个:
如果页面使用了复杂的JavaScript框架(如React、Vue等),并且其事件处理逻辑被封装在框架内部,那么直接调用框架的API或方法可能更为合适,但这通常超出了Selenium的能力范围,并可能需要额外的工具或库来支持。

请问还有什么办法可以解决吗?请指导……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值