Python 如何切换到下一个窗口



>要求是:使用用户名/密码凭据登录主页。登录完成后,将显示新页面。在新页面中,有一个下拉按钮。从下拉列表中选择一个值并拍摄页面快照。

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.ui import Select
import time
options = Options()
options.headless = True
driver = webdriver.Firefox(options=options)
driver.get('url_to_page')
driver.find_element_by_id("username").send_keys("admin")
driver.find_element_by_id ("password").send_keys("admin")
driver.find_element_by_id("submit").click()   
firefox_elem = driver.find_element_by_tag_name('html') --> login to main page is working fine
******<missing piece: How to select a value from dropdown in next page>******
firefox_elem.screenshot('test.png') 

下面是需要选择的按钮,

<div id="ember8992" class="ember-view btn-group pull-left">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" rel="tooltip" data-original-title="" data-bindattr-168="168">
<script id="metamorph-126-start" type="text/x-placeholder"></script>Last 1 hour<script id="metamorph-126-end" type="text/x-placeholder"></script>
<script id="metamorph-127-start" type="text/x-placeholder"></script><script id="metamorph-127-end" type="text/x-placeholder">
</script> &nbsp;<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<script id="metamorph-137-start" type="text/x-placeholder"></script><script id="metamorph-128-start" type="text/x-placeholder"></script>
<li><a href="#" data-ember-action="169"><script id="metamorph-138-start" type="text/x-placeholder"></script>Last 1 hour<script id="metamorph-138-end" type="text/x-placeholder"></script></a></li>
<script id="metamorph-128-end" type="text/x-placeholder"></script><script id="metamorph-129-start" type="text/x-placeholder"></script>
<li><a href="#" data-ember-action="170"><script id="metamorph-139-start" type="text/x-placeholder"></script>Last 2 hours<script id="metamorph-139-end" type="text/x-placeholder"></script></a></li>
<script id="metamorph-129-end" type="text/x-placeholder"></script><script id="metamorph-130-start" type="text/x-placeholder"></script>
<li><a href="#" data-ember-action="171"><script id="metamorph-140-start" type="text/x-placeholder"></script>Last 4 hours<script id="metamorph-140-end" type="text/x-placeholder"></script></a></li>
<script id="metamorph-130-end" type="text/x-placeholder"></script><script id="metamorph-131-start" type="text/x-placeholder"></script>
<li><a href="#" data-ember-action="172"><script id="metamorph-141-start" type="text/x-placeholder"></script>Last 12 hours<script id="metamorph-141-end" type="text/x-placeholder"></script></a></li>
<script id="metamorph-131-end" type="text/x-placeholder"></script><script id="metamorph-132-start" type="text/x-placeholder"></script>
<li><a href="#" data-ember-action="173"><script id="metamorph-142-start" type="text/x-placeholder"></script>Last 24 hours<script id="metamorph-142-end" type="text/x-placeholder"></script></a></li>
<script id="metamorph-132-end" type="text/x-placeholder"></script><script id="metamorph-133-start" type="text/x-placeholder"></script>
<li><a href="#" data-ember-action="174"><script id="metamorph-143-start" type="text/x-placeholder"></script>Last 1 week<script id="metamorph-143-end" type="text/x-placeholder"></script></a></li>
<script id="metamorph-133-end" type="text/x-placeholder"></script><script id="metamorph-134-start" type="text/x-placeholder"></script>
<li><a href="#" data-ember-action="175"><script id="metamorph-144-start" type="text/x-placeholder"></script>Last 1 month<script id="metamorph-144-end" type="text/x-placeholder"></script></a></li>
<script id="metamorph-134-end" type="text/x-placeholder"></script><script id="metamorph-135-start" type="text/x-placeholder"></script>
<li><a href="#" data-ember-action="176"><script id="metamorph-145-start" type="text/x-placeholder"></script>Last 1 year<script id="metamorph-145-end" type="text/x-placeholder"></script></a></li>
<script id="metamorph-135-end" type="text/x-placeholder"></script><script id="metamorph-136-start" type="text/x-placeholder"></script>
<li><a href="#" data-ember-action="177"><script id="metamorph-146-start" type="text/x-placeholder"></script>Custom<script id="metamorph-146-end" type="text/x-placeholder"></script></a></li>
<script id="metamorph-136-end" type="text/x-placeholder"></script><script id="metamorph-137-end" type="text/x-placeholder"></script>
</ul>
</div>

我尝试了如何在Selenium for Python中切换到新窗口?。但面临问题。

有人可以帮助我如何在新窗口上工作吗?

根据您的问题描述,很难判断是否需要为此使用窗口句柄。你确实提到你试图使用driver.window_handles,但你提到的只是你面临一个问题。由于我不知道这个问题是什么,所以我在这里做一些假设。这两行代码:

driver.find_element_by_id("submit").click()   
firefox_elem = driver.find_element_by_tag_name('html') --> login to main page is working fine
******<missing piece: How to select a value from dropdown in next page>******

并不一定意味着firefox_elem = driver.find_element_by_tag_name('html')正在按预期工作。你只是在搜索顶级html标记,但如果驱动程序专注于上一个窗口句柄,则此调用不会引发任何错误。这里并没有真正检查任何东西。

我会使用window_handlesswitch_to_window来尝试切换到打开的新窗口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

# switch to newly opened window -- the index varies based on number of pages opened.
driver.switch_to_window(driver.window_handles[1])
# click button to expand dropdown (wait on it to exist first)
dropdown_button = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//button[@data-toggle='dropdown']")))
dropdown_button.click()
# click the option with text "Last 1 year" (wait on it to exist first)
dropdown_option = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//ul/li/a[text()='Last 1 year']")))
dropdown_option.click()

这将单击带有文本"过去 1 年"的下拉项。

我还建议尝试以下方法:

driver.find_element_by_id("submit").click()   
firefox_elem = driver.find_element_by_tag_name('html') --> login to main page is working
# switch to newly opened window -- the index varies based on number of pages opened.
driver.switch_to_window(driver.window_handles[1])
print(driver.page_source)

以查看驱动程序认为您的页面源是什么。这将帮助我们确定驱动程序当前关注的内容,以便我们可以确定是否需要利用driver.window_handlesdriver.switch_to_window.

最新更新