Python - Selenium:提交表单而不打开新选项卡或新窗口

时间:2014-07-29 07:39:18

标签: python selenium selenium-webdriver web-crawler

我有:

driver = webdriver.Firefox()

我有一些网址:driver.get(url)

我想提交一份表格:

elt = driver.find_element_by_class_name('special_class')
driver.find_element_by_xpath('//button').click()

这会打开一个新窗口,我想在一个窗口中发生所有事情。

我可能需要多次提交类似的内容,然后解析输出。

有没有办法留在同一个窗口?我不想打开很多窗户。

提前致谢。

2 个答案:

答案 0 :(得分:4)

如果在提交表单后按钮打开新窗口,我担心没有什么可以做的。我想到的只是使用像PhantomJS这样的无头浏览器 - 因为你正在进行网络爬行,你也可以欣赏速度。请参阅Python的this教程。

但实际上我记得有一个解决方法,你可以将Firefox browser.link.open_newwindow设置为1,这应该会导致每个新窗口都在当前窗口中打开。但是我不确定这是否适用于HTML form

fp = webdriver.FirefoxProfile()
fp.set_preference("browser.link.open_newwindow", 1)
browser = webdriver.Firefox(firefox_profile=fp)

请参阅此功能的参考here

答案 1 :(得分:3)

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

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

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

如果按照您的要求,您需要在新窗口中打开表单,只需将_blank更改为_self即可。 (当然,someID是实际表单ID的占位符)

Browser是Selenium WebDriver,它执行里面的javaScript代码,它将表单的属性更改为所需的属性。如果表单没有唯一ID,则可能有另一个标识属性。

希望这有帮助!我今天发现了这个。