amazon-web-services - Selenium 在 AWS-batch 上失败
问题描述
我正在运行一个实现 selenium 和 geckodriver 以登录网站帐户的 python 脚本。该代码在容器中本地运行没有问题,但是当我将它部署到 AWS-batch 时,它停止可靠运行。
我每天早上在预定的时间运行这项工作,它工作了几天,但大多数情况下它会失败。当我到达这段代码时发生错误:
driver.find_element_by_class_name(submit_button_name).click()
wait = WebDriverWait(driver, 600)
wait.until(lambda driver: driver.current_url != login_url)
在它达到等待条件后,它只是等待,直到时间用完并且作业失败。我检查了 geckodriver 日志,并且在提交登录详细信息后重定向从未发生,它只是与登录详细信息保持在同一页面上。
代码本身似乎工作正常,将其部署到导致问题的 aws-batch
我努力了:
- 增加条件的等待时间。
- 确保 geckodriver 和 firefox 版本兼容。
- 在一天中的不同时间运行作业。
- 添加了检查提交按钮等是否存在的条件。
在将 selenium 测试部署到 ec2 实例时,我可能会遗漏什么吗?我是否需要提供特定资源来运行这些测试?是什么导致这项工作有时成功而不是其他?
解决方案
根据您的描述,测试与登录部分有关,虽然它在本地运行良好但在 AWS Batch 上失败,所以我认为资源(EC2 实例)具有正确角色的潜在根本原因,所以它可以在不被页面(防火墙)阻止的情况下执行吗?因为有时网站防火墙会检测是否有机器人浏览页面(来自geckodriver、chromedriver等),所以它会缓存页面或阻止容器执行。因此,请确保您的 EC2 实例(IAM 角色)具有正确的角色,并尝试检查防火墙是否有任何东西可以阻止您的容器正常运行?
推荐阅读
- css - 如何修改 Tabs 组件的包装 css 规则以使文本在 Material-UI 中的垂直选项卡中左对齐?
- javascript - 反应如何将对象发送到 onClick 事件
- reactjs - 如何在反应中实现 Axios.delete 并通过 id 从 Mongodb 中删除
- python - 如何升级pip?更新时出现此错误
- javascript - 使用 jQuery 删除下一个元素
- react-native - ios上的问题我正在构建一个反应原生的应用程序出现错误,添加反应导航后发生错误
- python - 在数据框选择操作中使用窗口函数的pyspark变量未定义错误
- c# - Azure Durable Function 使用 CloudTable.ExecuteBatchAsync 生成错误“超出主机阈值:连接”
- ios - 是否可以扩展表头视图,使其像背景一样位于第一行单元格的后面?
- python - 在Python中将月份和年份的列一起变成季度和年份的列