質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

2141閲覧

【Python】seleniumにてFirefoxの新規タブが開けません。新規のウィンドウが開いてしまいます。

hirokuro900

総合スコア33

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2020/11/01 02:09

Pythonでseleniumを使用して、簡易的なスクレイピングの練習をしています。
Firefoxを使っているのですが、新規タブを開きたいのですがなぜか新規のウィンドウを開いてしまいます。

コードのコメントアウトに流れを記載しております。
ログイン状態を保持して、ブラウザを立ち上げた場合のみ新規ウィンドウになりまして、
通常のゲスト?(ログインしていない状態)では問題なく別タブを開いてくれます。

知識不足でお恥ずかしいのですが、調べた結果から判断するとオプションの設定が問題なのかな?
と思って検索していますがどうしても答えが分かりません。

お忙しいところに申し訳ないのですが、どなたかご教示願えませんでしょうか..
よろしくお願いしますm(_ _)m

動作環境
os:windows10
osビルド:19041.572
python:3.8.3
selenium:3.141.0
Firefox:82.0.2

Python

1import time 2from selenium import webdriver 3from selenium.webdriver.firefox.options import Options 4from selenium.webdriver.common.keys import Keys 5 6 7# ログイン保持でFirefoxを起動するためのプロファイル設定 8fp = webdriver.FirefoxProfile('C:\Users\motoy\AppData\Roaming\Mozilla\Firefox\Profiles\010hmdn9.default-release') 9driver = webdriver.Firefox(fp) 10 11 12# ログイン保持ではなくゲストとして起動すると問題なくタブが開けます 13# driver = webdriver.Firefox() 14 15 16# 検索するワード 17key_words = 'モロッカンオイル 50ml' 18 19 20# 最初のタブでGoogle検索 21driver.get('https://www.google.com/') 22time.sleep(1) 23search_box = driver.find_element_by_name("q") 24search_box.send_keys(key_words) 25search_box.submit() 26 27 28##################################################################### 29# 同じウィンドウ内の別タブで開く予定ですが、新規のウィンドウで開いてしまいます... 30# 2番目のタブでヤフオクを開いてワードを検索する 31driver.execute_script("window.open('https://auctions.yahoo.co.jp/');") ## 問題の箇所 32##################################################################### 33 34 35# 新しいタブに切り替える 36driver.switch_to.window(driver.window_handles[1]) 37time.sleep(4) 38 39 40# ポップアップ広告が表示された場合の対応(広告を閉じる) 41if driver.find_element_by_xpath('/html/body/div[1]/div/section/div/a[2]'): 42 driver.find_element_by_xpath('/html/body/div[1]/div/section/div/a[2]').submit() 43 44# ヤフオクで検索 45search_box = driver.find_element_by_name("p") 46search_box.send_keys(key_words) 47search_box.submit() 48time.sleep(5) 49 50driver.quit()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

pip install pyautogui
して

Python

1import time 2from selenium import webdriver 3from selenium.webdriver.firefox.options import Options 4from selenium.webdriver.common.keys import Keys 5 6import pyautogui 7 8 9# ログイン保持でFirefoxを起動するためのプロファイル設定 10fp = webdriver.FirefoxProfile('C:\Users\motoy\AppData\Roaming\Mozilla\Firefox\Profiles\010hmdn9.default-release') 11driver = webdriver.Firefox(fp) 12 13 14# ログイン保持ではなくゲストとして起動すると問題なくタブが開けます 15#driver = webdriver.Firefox() 16 17 18# 検索するワード 19key_words = 'モロッカンオイル 50ml' 20 21 22# 最初のタブでGoogle検索 23driver.get('https://www.google.com/') 24time.sleep(1) 25search_box = driver.find_element_by_name("q") 26search_box.send_keys(key_words) 27search_box.submit() 28 29 30##################################################################### 31# 同じウィンドウ内の別タブで開く予定ですが、新規のウィンドウで開いてしまいます... 32# 2番目のタブでヤフオクを開いてワードを検索する 33culSize = driver.get_window_size() 34driver.maximize_window() 35pyautogui.hotkey('ctrl','t') 36driver.set_window_size(culSize['width'],culSize['height']) 37##################################################################### 38 39 40# 新しいタブに切り替える 41driver.switch_to.window(driver.window_handles[1]) 42driver.get('https://auctions.yahoo.co.jp/') 43time.sleep(4) 44 45 46# ポップアップ広告が表示された場合の対応(広告を閉じる) 47if len(driver.find_elements_by_xpath('/html/body/div[1]/div/section/div/a[2]')) > 0: 48 driver.find_element_by_xpath('/html/body/div[1]/div/section/div/a[2]').click() 49 50# ヤフオクで検索 51search_box = driver.find_element_by_name("p") 52search_box.send_keys(key_words) 53search_box.submit() 54time.sleep(5) 55 56driver.quit()

上記コードは ウインドウサイズ変わるので

Python

1import time 2from selenium import webdriver 3from selenium.webdriver.firefox.options import Options 4from selenium.webdriver.common.keys import Keys 5 6from ctypes import * 7import ctypes 8import pyautogui 9 10 11# ログイン保持でFirefoxを起動するためのプロファイル設定 12fp = webdriver.FirefoxProfile('C:\Users\motoy\AppData\Roaming\Mozilla\Firefox\Profiles\010hmdn9.default-release') 13driver = webdriver.Firefox(fp) 14 15 16# ログイン保持ではなくゲストとして起動すると問題なくタブが開けます 17#driver = webdriver.Firefox() 18 19 20# 検索するワード 21key_words = 'モロッカンオイル 50ml' 22 23 24# 最初のタブでGoogle検索 25driver.get('https://www.google.com/') 26time.sleep(1) 27search_box = driver.find_element_by_name("q") 28search_box.send_keys(key_words) 29search_box.submit() 30time.sleep(1) 31 32##################################################################### 33# 同じウィンドウ内の別タブで開く予定ですが、新規のウィンドウで開いてしまいます... 34# 2番目のタブでヤフオクを開いてワードを検索する 35 36EnumWindowsProc = CFUNCTYPE(c_bool, POINTER(c_int), POINTER(c_int)) 37def getWindowText(hwnd): 38 length = ctypes.windll.user32.GetWindowTextLengthW(hwnd) + 1 39 s = (ctypes.c_wchar * length)() 40 ctypes.windll.user32.GetWindowTextW(hwnd, ctypes.byref(s), length) 41 return s.value 42 43def forground( hwnd, _): 44 name = getWindowText(hwnd) 45 if name.find('Mozilla Firefox') >= 0: 46 ctypes.windll.user32.SetForegroundWindow(hwnd) 47 return False 48 49ctypes.windll.user32.EnumWindows( EnumWindowsProc(forground), None) 50time.sleep(1) 51pyautogui.hotkey('ctrl','t') 52time.sleep(1) 53##################################################################### 54 55 56# 新しいタブに切り替える 57driver.switch_to.window(driver.window_handles[1]) 58driver.get('https://auctions.yahoo.co.jp/') 59time.sleep(4) 60 61 62# ポップアップ広告が表示された場合の対応(広告を閉じる) 63if len(driver.find_elements_by_xpath('/html/body/div[1]/div/section/div/a[2]')) > 0: 64 driver.find_element_by_xpath('/html/body/div[1]/div/section/div/a[2]').click() 65 66# ヤフオクで検索 67search_box = driver.find_element_by_name("p") 68search_box.send_keys(key_words) 69search_box.submit() 70time.sleep(5) 71 72driver.quit()

投稿2020/11/01 13:43

編集2020/11/01 21:34
Reach

総合スコア735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirokuro900

2020/11/02 09:44

無事に動作いたしました。 とても勉強になります!貴重なお時間を割いていただき感謝しています。 ありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問