簡體   English   中英

Python selenium - 如何切換到下一個 window

[英]Python selenium - How to switch to next window

要求是:使用用戶名/密碼憑據登錄到主頁。 登錄完成后,會出現新頁面。 在新頁面中,有一個下拉按鈕。 Select 下拉列表中的值並拍攝頁面快照。

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>

我試過How to switch to new window in Selenium for Python? . 但面臨問題。

有人可以幫助我處理新的 window 嗎?

根據您的問題描述,很難判斷您是否需要為此使用 window 句柄。 您確實提到過您嘗試使用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 句柄,則此調用不會引發任何錯誤。 它並沒有真正檢查這里的任何東西。

我會使用window_handlesswitch_to_window來嘗試切換到您打開的新 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM