【问题标题】:Open form using Selenium in new window在新窗口中使用 Selenium 打开表单
【发布时间】:2014-08-01 18:33:25
【问题描述】:

各位爬虫们好,

我正在尝试在 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 还是其他方式,这样我就不必重新加载第一页并点击它的按钮这么多次?

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

【问题讨论】:

    标签: python forms selenium


    【解决方案1】:

    所以,我进行了一些挖掘,结果发现在某些情况下是可以做到的。

    我发现this link 是关于设置属性的,读过之后表单可以有属性,尤其是target = _blank,它会在新的(空白)窗口中打开表单

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

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

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

    Browser 是我给我的 WebDriver 起的名字。这会执行内部 javaScript,它将表单的 target 属性设置为 _blank - 这正是我想要的。

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2011-12-09
      • 2020-04-16
      • 2014-03-24
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      相关资源
      最近更新 更多