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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python

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

selenium

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

Q&A

解決済

2回答

6379閲覧

PythonのSeleniumにてSeleniumを使用せずに起動したブラウザのすべてのタブのURLを取得したい

mikumikuDM

総合スコア83

Python

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

selenium

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

0グッド

0クリップ

投稿2021/06/24 07:03

前提

PythonのSeleniumにてSeleniumを使用せずに起動したブラウザのすべてのタブのURLを取得したいです。
使用するブラウザはChromeです。
以下のページを参考にしました。
https://qiita.com/shinkoma/items/38ff5ca61fe8fc5d258d
問題点としては
「どのようにChromeを起動するか」
「どのように起動したChromeを操作するか」
「すべてのタブのURLを取得するためにはどうすればいいか」
です

実現したいこと

以下の手順でURLを取得したいです
1.デスクトップに作成したショートカット("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222)
にてクロームを起動(seleniumを使用せずに普段使用しているブラウザを使用することが今回の目的です)
2.手動でクロームを操作し、複数のタブを開く
以下例
イメージ説明
3.Seleniumを使用して現在開いているブラウザのタブのすべてのURLを取得する
以下例
https://www.youtube.com/
https://www.youtube.com/watch?v=0l8ANt_V6kU&ab_channel=TBSNEWS
https://www.youtube.com/watch?v=bKwQJo4Qems&ab_channel=FNN%E3%83%97%E3%83%A9%E3%82%A4%E3%83%A0%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3
https://www.youtube.com/watch?v=yiU2iR6FFcI&ab_channel=ANNnewsCH

以上のように取得したいです

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

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

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

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

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

jbpb0

2021/06/24 16:50

> 動くプログラムを質問 それは、chromedriverのインストールのやり方に依存するので、誰でもこう書けば動く、というのは無いのです chromedriver.exeがあるところが環境変数Pathに入ってれば、webdriver.Chrome()で指定する必要は無いので、質問のケースでは、 driver = webdriver.Chrome(chrome_options= chrome_options) で動きます 実際、私のパソコンではそれで動いて、Chromeにアクセスできました (前の質問の時に確認済み) 環境変数Pathに入ってない場合は、chromedriver.exeがあるところをwebdriver.Chrome()で指定する必要があります どこにあるのかは、入れた人次第なので、質問者さんしか知りません ネットの記事の記載をそのままコードに書いても、ダメです 質問者さんはchromedriverのことを知らなかったということは、もしかしたら、パソコンにまだchromedriverをインストールしてなかったりして もしそうなら、コード書く前に、まずそこからですね 参考 https://self-development.info/python%E3%81%A7chromedriver%E3%81%AB%E3%82%88%E3%82%8Aselenium%E6%93%8D%E4%BD%9C/
guest

回答2

0

ベストアンサー

chromedriverを知らなかったと言うことは、
まずは、Seleniumを初めて使う人向けの解説ページを見て、簡単なプログラムを動かしてからですね。

Seleniumがちゃんと使えるようになったという前提で、

window_handlesでタブの一覧が得られるので、それぞれのタブにswitch_to_windowして、current_urlを見れば良いです。

Python

1options = Options() 2options.add_experimental_option("debuggerAddress", "127.0.0.1:ポート番号") 3driver = webdriver.Chrome(r"chromedriverのフルパス", options=options) 4 5for tab in driver.window_handles: 6 driver.switch_to_window(tab) 7 print(driver.current_url)

投稿2021/06/24 14:12

otn

総合スコア85901

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

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

mikumikuDM

2021/06/24 17:02

こちらを参考にしきたい通りの動作をさせることができましたotnさんありがとうございます。 以下に実行した手順について記入します。 1,デスクトップ上で右クリックしてショートカットを作成、 ショートカットの場所は以下を入力 "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 2,以下のコードを記入 from selenium import webdriver from selenium.webdriver.chrome.options import Options import os import signal options = Options() options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") print("1") driver = webdriver.Chrome(r"C:\Users\hatun\AppData\Local\Programs\Python\Python39\chromedriver.exe",options=options) print("2") for tab in driver.window_handles: driver.switch_to_window(tab) print(driver.current_url) 3,他のクロームブラウザをすべて閉じ、1で作成したショートカットを使用してブラウザを起動 いくつかタブを開き、2で作成したプログラムを実行します。 無事動作させることができました、ありがとうございました。
mikumikuDM

2021/06/24 17:03

print("1")とprint("2")は動作確認用です、無視していただいて構いません。
guest

0

ドキュメントを読んだ感じでは...

remote-debugging-port オプションをつけて起動した Chrome を操作したいということであれば、

python

1chrome_options = Options() 2chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") 3chrome_driver = r'C:\path\to\chromedriver.exe' 4driver = webdriver.Chrome(chrome_driver, chrome_options= chrome_options)

のように debuggerAddress で、remote-debugging-port で指定した ポートを指定するとできないでしょうか?

投稿2021/06/24 08:59

CHERRY

総合スコア25218

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

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

mikumikuDM

2021/06/24 10:30

以下のプログラムを実行しましたができませんでした。 from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") chrome_driver = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' print("1") driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options) print("2") driver.get("https://twitter.com/home") print(driver.current_url) driver.quit() 以下エラーコードです PS C:\Users\hatun\Desktop\pythontest> & 'C:\Users\hatun\AppData\Local\Programs\Python\Python39\python.exe' 'c:\Users\hatun.vscode\extensions\ms-python.python-2021.6.944021595\pythonFiles\lib\python\debugpy\launcher' '49219' '--' 'c:\Users\hatun\Desktop\pythontest\ブラウザ起動テスト.py' 1 c:\Users\hatun\Desktop\pythontest\ブラウザ起動テスト.py:8: DeprecationWarning: use options instead of chrome_options driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options) Traceback (most recent call last): File "C:\Users\hatun\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\Users\hatun\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code exec(code, run_globals) File "c:\Users\hatun.vscode\extensions\ms-python.python-2021.6.944021595\pythonFiles\lib\python\debugpy\__main__.py", line 45, in <module> cli.main() File "c:\Users\hatun.vscode\extensions\ms-python.python-2021.6.944021595\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 444, in main run() File "c:\Users\hatun.vscode\extensions\ms-python.python-2021.6.944021595\pythonFiles\lib\python\debugpy/..\debugpy\server\cli.py", line 285, in run_file runpy.run_path(target_as_str, run_name=compat.force_str("__main__")) File "C:\Users\hatun\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 268, in run_path return _run_module_code(code, init_globals, run_name, File "C:\Users\hatun\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 97, in _run_module_code _run_code(code, mod_globals, init_globals, File "C:\Users\hatun\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code exec(code, run_globals) File "c:\Users\hatun\Desktop\pythontest\ブラウザ起動テスト.py", line 8, in <module> driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options) File "C:\Users\hatun\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in __init__ self.service.start() File "C:\Users\hatun\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\common\service.py", line 98, in start self.assert_process_still_running() File "C:\Users\hatun\AppData\Local\Programs\Python\Python39\lib\site-packages\selenium\webdriver\common\service.py", line 109, in assert_process_still_running raise WebDriverException( selenium.common.exceptions.WebDriverException: Message: Service C:\Program Files (x86)\Google\Chrome\Application\chrome.exe unexpectedly exited. Status code was: 0 PS C:\Users\hatun\Desktop\pythontest>
mikumikuDM

2021/06/24 10:31

お伺いしたいのですが、そちらの環境ではそのコードで実行できたのでしょうか?
otn

2021/06/24 12:11

> chrome_driver = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' これはchromedriver じゃなくてchromeですね。区別が付いていないのでしょうか?
mikumikuDM

2021/06/24 13:36

chromedriverとchromeの区別がついていませんでした、 そちらはどのように修正すればよろしいですか?
mikumikuDM

2021/06/24 13:40

chrome_driver = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' を chrome_driver = r'C:\path\to\chromedriver.exe' にそのまま変更しても動作しませんでした、 chromedriver.exeの場所を入力する必要があると思うので、そちらについて今調べてみます
otn

2021/06/24 13:43

chromedriverを知らなかったと言うことは、 まずは、Seleniumを初めて使う人向けの解説ページを見て、簡単なプログラムを動かしてからですね。
mikumikuDM

2021/06/24 14:31

質問したいのはプログラムの動かし方ではなく、動くプログラムがどのように書かれているかなので、 動くプログラムを質問しています。 動かし方については実際に動いているプログラムを見たあとの方が理解しやすいと思います。
mikumikuDM

2021/06/24 14:34

コメント欄ではなく回答として返事して頂いていたのですね、見落としていました失礼いたしました。
otn

2021/06/24 14:50

> 動くプログラムがどのように書かれているかなので、 それは、 > まずは、Seleniumを初めて使う人向けの解説ページを見て、簡単なプログラム を勉強しましょうと言うことです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問