我有:
driver = webdriver.Firefox()
我有一些网址:driver.get(url)
我想提交一份表格:
elt = driver.find_element_by_class_name('special_class')
driver.find_element_by_xpath('//button').click()
这会打开一个新窗口,我想在一个窗口中发生所有事情。
我可能需要多次提交类似的内容,然后解析输出。
有没有办法留在同一个窗口?我不想打开很多窗户。
提前致谢。
答案 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,则可能有另一个标识属性。
希望这有帮助!我今天发现了这个。