在新窗口中使用Selenium打开表单

时间:2014-08-01 18:33:26

标签: python forms 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

如果可能的话,我想找到一种方法,这样做不会让我每次点击按钮的方式 - 也就是说,我想消除循环的步骤(1)并改变步骤(4) )简单地切换窗口。

为了澄清表单的提交方式,代码中有一个javascript函数负责提交,但内置的Selenium方法Element.submit()仍然有效(所以我可以.click()开启提交按钮或我可以从表单中的任何元素.submit()

为了让我的问题更清晰,是否可以通过插入javascript或其他方式在新窗口/标签中打开表单输出,这样我就不会重新加载第一页并多次单击其按钮?

如果您想了解有关代码和网站的更多具体细节,请告诉我,如果问题中缺少任何重要信息,请在回答或评论中告诉我。

1 个答案:

答案 0 :(得分:0)

所以,我做了一些挖掘,结果发现 可以做到这一点,在某些情况下。

我找到了关于设置属性的this link,并且在阅读完表单后可以拥有属性,尤其是target = _blank,这会在新的(空白)窗口中打开表单

这实际上取决于表单的提交方式。如果在HTML中代码具有<form ... id = someID,并且表单元素具有一些标识符(在本例中为someID),则可以手动更改此属性。

这会打开强制表单在下次提交时在新窗口中打开:

Browser.execute_script('document.getElementById("someID").'setAttribute("target","_blank")')

浏览器是我给WebDriver的名称。这将执行内部javaScript,它将表单的target属性设置为_blank - 正是我想要的。