我正在尝试通过 python 以编程方式操作内部网站。它实际上在大多数情况下都有效,但是在每个框的值发生更改后,我一直试图触发 POST 请求。我可以在 Chrome 调试器中看到,在我单击其中一个选择框中的值后发出了 POST 请求。
例如,有三个选择框,每个选择框都依赖于最后一个。
- 在选择框 A 中选择一个值时,选择框 B 将通过 AJAX 填充。
- 当在选择框 B 中选择一个值时,选择框 C 将通过 AJAX 填充。
选择框 A 中的项目在页面加载时静态加载。我可以遍历那些没有问题的。
import win32com.client
ie = win32com.client.DispatchEx("InternetExplorer.Application")
ie.Navigate("...")
# stuff to see if the page loaded...
boxAObj = doc.getElementById("selectBoxA")
for i in range(1,boxAObj):
# I've tried this multiple ways - none have triggered the request
boxAObj.options.selectedIndex = i
boxBObj = doc.getElementById("selectBoxB")
print boxBObj.length
print 语句总是打印 1。在选择框“Select...”中有一个默认值,所以长度为 1。
以下是该网站的一些图像以显示该行为。第一个是在新页面加载之后,鼠标或通过 javascript 没有选择任何内容。
在这张图片中,我使用 javascript 以编程方式在选择框 A 中选择了一个项目,但在选择框 B 中没有加载任何内容:
在这张图片中,我在选择框 A 中单击了相同的值,您可以看到选择框 B 按预期填充:
最后一条信息是选择框具有分配给它们的 onchange 事件。这是解决这个问题的关键吗?
编辑:我刚刚发现一个帖子显示来自 javascript 的 obj.onchange() 应该可以解决问题,它适用于浏览器,但不适用于 python。我应该尝试评估python中的函数吗?我已经尝试了一些东西,但还没有任何效果。见下文: