问候刮刀,
我试图在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或其他方式在新窗口/标签中打开表单输出,这样我就不会重新加载第一页并多次单击其按钮?
如果您想了解有关代码和网站的更多具体细节,请告诉我,如果问题中缺少任何重要信息,请在回答或评论中告诉我。
答案 0 :(得分:0)
所以,我做了一些挖掘,结果发现 可以做到这一点,在某些情况下。
我找到了关于设置属性的this link,并且在阅读完表单后可以拥有属性,尤其是target = _blank
,这会在新的(空白)窗口中打开表单
这实际上取决于表单的提交方式。如果在HTML中代码具有<form
... id = someID
,并且表单元素具有一些标识符(在本例中为someID),则可以手动更改此属性。
这会打开强制表单在下次提交时在新窗口中打开:
Browser.execute_script('document.getElementById("someID").'setAttribute("target","_blank")')
浏览器是我给WebDriver的名称。这将执行内部javaScript,它将表单的target
属性设置为_blank
- 正是我想要的。