使用Selenium在新窗口中打开表单
大家好,
我正在用Python 3.4的Selenium库来打开一个网站的界面,想从中获取我需要的信息。不过很遗憾的是,每次我都需要提交一个表单,这个表单会跳转到一个新页面,但不会打开新窗口,而且我不能一次性获取所有信息。整个过程是这样的:
"For" all relevant fields: # as of right now, this cannot be a for loop
# because the elements are lost when I submit
(1) click on the necessary buttons (make it visible)
in order to select a field in the form
(2) submit the form
(3) get the necessary information from the new page
(4) go back to the first page
如果可以的话,我希望找到一种方法,不用每次都点击按钮,也就是说,我想省去我循环中的第一步,把第四步改成简单地切换窗口。
为了更清楚地说明表单是如何提交的,代码里有一个JavaScript函数负责提交,但Selenium自带的方法Element.submit()
也能用(所以我可以选择点击提交按钮,也可以从表单中的任何元素调用.submit()
)。
为了让我的问题更清楚,有没有办法让表单的输出在新窗口或新标签页中打开,无论是通过插入JavaScript还是其他方法,这样我就不用反复加载第一页和点击它的按钮了?
如果你想了解更多关于代码和网站的具体细节,请私信我,或者在回答或评论中告诉我是否有任何重要信息遗漏了。
1 个回答
我查了一下,发现其实在某些情况下,这个是可以做到的。
我找到了一些关于设置属性的内容,特别是有提到表单可以有一些属性,比如 target = _blank
,这个属性可以让表单在一个新的(空白的)窗口中打开。
这其实取决于表单是怎么提交的。如果在HTML代码中有 <form
...id = someID
,而这个表单元素有一个标识符(在这里是someID),那么你可以手动更改这个属性。
这样做可以强制表单在下次提交时在新窗口中打开:
Browser.execute_script('document.getElementById("someID").setAttribute("target","_blank")')
这里的Browser是我给我的WebDriver起的名字。这个命令会执行内部的JavaScript代码,设置表单的 target
属性为 _blank
,正是我想要的效果。