皆さん、こんにちは。
今回は、タブ切り替え、前ページに戻る、進む、リフレッシュについてご紹介したいと思います。
今回も前回と引き続き、Chrome Driverを使用して各自動化の操作をご紹介していきたいと思います。
■記事内リンク
・事前準備
・タブ切り替え
・前ページに戻る
・進む
・リフレッシュ
□事前準備
◇ipynbファイル作成
いつものように、Anacondaを起動後、JupyterLabを選択しましょう。
JupyterLab起動後、画面左上のメニュー「File」⇒「New」⇒「Notebook」を選択します。
Select Kernelで「Python 3」を選択し、作成したipynbファイルのタブを右クリック後、
Rename Fileを選択し、ファイル名を設定します。
今回以下のようにファイル名を設定しました。
Jupyterlab_Web_operation_Chrome04.ipynb
◇インポート
selenium、webdriver、timeをインポートしましょう。
以下を入力しインポートします。#インポート
import selenium
from selenium import webdriver
import time
print("準備:inport OK")
time.sleep(3)
◇driver起動
Chrome Driverを起動しましょう。
前回と同様に以下を記述します。#Chrome Driver設定
driver=webdriver.Chrome(executable_path="C:\\Users\\sinsu\\WebDrivers\\ChromeDriver\\Ver89\\chromedriver.exe")
time.sleep(3)
driver.maximize_window()
time.sleep(3)
print("Chrome Driver OK")
time.sleep(1)
◇テストページへ移動
今回は以下テストページに遷移したいとお思います。
#テストページ遷移
driver.get('https://susakiworks.com/testwork/testpage/')
time.sleep(3)
print("テストページに遷移しました。")
time.sleep(1)
該当のテストページへ遷移できればOKです。
□タブ切り替え
テストページ「TestPage01」リンクをクリックして別タブで開こうと思います。
別タブで開く際は、「Ctrl」キーを押しながらリンクをクリックしたいと思います。
その際、キーを入力する「Key」と、「ActionChain」をインポートします。
◇インポート
別タブでリンクをクリックする際、以下をインポートします。
#インポート
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
time.sleep(1)
print("インポートしました。")
time.sleep(1)
◇別タブでリンクをクリック
「TestPage01」のリンクを別タブでクリックしましょう。
リンクを右クリック⇒検証からリンクテキストを確認または、リンクテキストは、表示されている以下文字列となっていますので、それをコピーします。
「https://susakiworks.com/softwareesting/testpage/test_page_no1/」
コードは、以下のように記述します。
#別タブで開く
TestPage = driver.find_element_by_link_text("https://susakiworks.com/testwork/testpage/test_page_no1/")
actions = ActionChains(driver)
actions.key_down(Keys.CONTROL)
actions.click(TestPage)
actions.perform()
time.sleep(3)
print("別タブで開きました。")
time.sleep(1)
「key_down」を使用して、「Ctrl」キーを押し、リンクをクリックしています。
コードが問題なく実行できたら、以下のように別タブでリンク先のページが開きました。
◇タブ切り替え実行
リンクページを別タブで開くことができました。
現状、Driverの操作は、表示しているテストページ「https://susakiworks.com/testwork/testpage/」となっています。
これを別タブで開いたページに切り替える際は、以下コードを記述し実行します。
#新しいタブに表示切り替え
driver.switch_to.window(driver.window_handles[1])
time.sleep(3)
Print("別タブに切り替えました。")
time.sleep(1)
実行すると、タブの表示を切り替えることができました。
タブを切り替える場合は、「switch_to.window」を使用します。
また、「handles[1]」は、開いているタブの番号を指定しています。
タブは、0、1、2…とカウントされるので、2つ目のタブは「1」となります。
◇開いたタブを閉じる
開いたタブを閉じたいと思います。
以下コードを実行して、タブを閉じます。#開いたタブを閉じます。
driver.close()
time.sleep(3)
print("開いたタブをCloseします。")
time.sleep(1)
◇元のタブに切り替え
開いたタブは閉じましたが、このまま元のタブで操作を行うと、エラーとなってしまいます。
それは、まだ最初のタブに制御が切り替わっていないためです。
元のタブに制御を切り替える場合は、以下コードを実行します。
#元タブに表示切り替え
driver.switch_to.window(driver.window_handles[0])
time.sleep(3)
print("別タブに切り替えました。")
◇Key_down系の問題点
タブを切り替える際に、Key_downで「Ctrl」キーを押しており、こちらが実は、タブを閉じた場合でも効いている状態となっています。
試しに、以下操作を行い、ページ遷移を行ってみます。
「Home」のリンクを選択し、ホームページに遷移してみます。
#トップページリンククリック
Top = driver.find_element_by_xpath('//*[@id="breadcrumb"]/ol/li[1]/a/span').click()
time.sleep(3)
print("ホームページに遷移しました。")
time.sleep(1)
すると、別タブで当サイトのホームページが表示されてしまいました。
こちらについて、「actions.key_up(Keys.CONTROL)」等を試みましたが、解除されませんでした。。。
他のSeleniumを掲載されているページ、動画を参照しましたが、解決策当、見当たりませんでした。。。
こちらは、わかり次第、更新したいと思います。
※次の項目を行いたいので、一度、Driverで開いたページをCloseし、再度テストページを開いています。
#Chrome Driver設定
driver=webdriver.Chrome(executable_path="C:\\Users\\sinsu\\WebDrivers\\ChromeDriver\\Ver89\\chromedriver.exe")
time.sleep(3)
driver.maximize_window()
time.sleep(3)
print("Chrome Driver OK")
time.sleep(1)
#テストページ遷移
driver.get('https://susakiworks.com/testwork/testpage/')
time.sleep(3)
print("テストページに遷移しました。")
time.sleep(1)
□前ページに戻る
◇ページ遷移
再度テストページを開きます。
開いた後は、ページに戻る操作の確認のため、任意のページに遷移したいと思います。
当サイトのホームページに遷移したいと思います。#トップページリンククリック
Top = driver.find_element_by_xpath('//*[@id="breadcrumb"]/ol/li[1]/a/span').click()
time.sleep(3)
print("ホームページに遷移しました。")
time.sleep(1)
◇戻る
前のページに戻る操作は簡単です。
以下を実行します。
#前ページに戻る
driver.back()
print("テストページに戻りました。")
time.sleep(1)
ホームページからテストページに戻れたらOKです。
□進む
進む操作も簡単です。
以下を行うことで、進む(遷移したページを表示)ことができます。
#ページに進む
driver.forward()
print("テストページに戻りました。")
time.sleep(1)
ホームページに進めたらOKです。
□リフレッシュ
最後に、リフレッシュ操作を行います。
リフレッシュは、以下操作で行うことができます。
#再読み込み
driver.refresh()
print("Homeページを再読み込みしました。")
time.sleep(1)
ページが再読み込みされたらOKです。
■最後に
今回は、Chrome driverを使用して、「ダウンロード」、「アップロード」、「データ駆動型テスト」についてご紹介いたしました。
次回もWeb操作について、ご紹介していきたいと思います。
最後まで見て頂き、ありがとうございました。
サイトトップへ
https://susakiworks.com/
Pythonをおぼえたらブラウザ操作を自動化しよう: Seleniumで操作してBeautifulSoupで解析をする