DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

MacからSeleniumを使ってブラウザ操作をしてみる 備忘録

以前にVPSでSeleniumを使ってブラウザの操作をしていたのですが、「そういえばMacでもPyhtonから操作出来るのかしら?」という興味でMacで動かしてみることにしました。

MacでSeleniumはJavaで昔に動かしたことがありましたがPythonからは初めての試みです。

dreamerdream.hateblo.jp

 

pipでインストールします。

pip3 install selenium

 

特に問題なく関連パッケージもインストールされるようです。めちゃ簡単!

備忘録としてスクショ

 

Webドライバーへのパスを指定しないといけないようなので、Chromeブラウザのアドレスバーへ「chrome://version」と入力してバージョン情報を見ます。

 

「実行ファイルのパス」とあるのでこれをメモ。

最終ディレクトリ内「MacOS」に「chromedriver」と付けるそうです。(よく解っていませんが)

 

実際のコードがこちら(殆どChatGPTで生成しています)

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

 

# Chrome WebDriverのパスを指定してServiceオブジェクトを作成

driver_path = '/Applications/Google Chrome.app/Contents/MacOS/chromedriver'

service = Service(driver_path)

 

# Serviceを使用してWebDriverを起動

driver = webdriver.Chrome(service=service)

 

# Googleの検索ページを開く

driver.get('https://www.google.com')

 

# 検索ボックスにキーワードを入力

search_box = driver.find_element(By.NAME, 'q')

search_box.send_keys('スクレイピング')

search_box.submit()

 

# 検索結果のタイトルとURLを取得

results = driver.find_elements(By.CSS_SELECTOR, 'div.g')

for result in results:

    title = result.find_element(By.CSS_SELECTOR, 'h3').text

    url = result.find_element(By.CSS_SELECTOR, 'a').get_attribute('href')

    print(f'Title: {title}')

    print(f'URL: {url}')

    print('---')

 

# WebDriverを終了

driver.quit()

 

ChatGPTで生成したままのコードでは

driver.find_element(By.NAME, 'q')

の部分が新しいバージョン(バージョン4以降)にうまく対応出来ておらず、

driver.find_element_by_name('q')

と書かれており、エラーが発生。

やや混乱しましたがそこだけ調べてクリアすればしっかり動いてくれました。

 

Pythonで動かすとJavaと違ってコンパイルが不要なので楽ですね。

 

また、最近のChomeではSeleniumでブラウザを起動させるとGoogleアカウントにはログイン出来ないという仕様になっているようです。

 

しかし、ログインしないと

↑↑こいつが邪魔でうまく操作できません。

 

調べた結果、profileを設定するとログイン出来るという情報を得たのでprofileを設定してみることにしました。

<参考>

Selenium経由でGoogleログオンしようとするとエラー | SyachikuLOG

SeleniumでGoogleにログインする方法 | KOSEN BLOG

 

先のバージョン情報からプロフィールパスを取得して

ディレクトリを見ると。。。。

Defaultの他にProfile 1〜Profile 10まであります。

これ中身見てもわからん!!Defaultじゃ駄目なん?

 

とりあえずProfile 1で指定して起動して、ログインできるか試してみることにしました。

先のコードにoptionを追加し、起動して5分以内に手動でログインする算段です。

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

from selenium.webdriver.chrome.options import Options

import time

 

options = Options()

options.add_argument("--user-data-dir=/Users/[ユーザー名]/Library/Application Support/Google/Chrome/Profile 1")

options.add_argument("--profile-directory=Profile 1")

 

# Chrome WebDriverのパスを指定してServiceオブジェクトを作成

driver_path = '/Applications/Google Chrome.app/Contents/MacOS/chromedriver'

service = Service(driver_path)

 

# Serviceを使用してWebDriverを起動

#driver = webdriver.Chrome(service=service)

driver = webdriver.Chrome(options=options,service=service)

 

# Googleの検索ページを開く

driver.get('https://www.google.com')

 

#この間に手動でログインする

time.sleep(600)

 

# 検索ボックスにキーワードを入力

search_box = driver.find_element(By.NAME, 'q')

search_box.send_keys('スクレイピング')

search_box.submit()

 

# 検索結果のタイトルとURLを取得

results = driver.find_elements(By.CSS_SELECTOR, 'div.g')

for result in results:

    title = result.find_element(By.CSS_SELECTOR, 'h3').text

    url = result.find_element(By.CSS_SELECTOR, 'a').get_attribute('href')

    print(f'Title: {title}')

    print(f'URL: {url}')

    print('---')

 

# WebDriverを終了

driver.quit()

 

結果、駄目でした^^;

えー!!?

残念ながら手持ちのアカウントでログイン出来ませんでした。

 

じゃあ、アカウント新規作成はどうなん?

 

できた!!

Selenium用のアカウントを作ることで対応出来ました。

 

 

先程の邪魔な案内も出ないのできちんと出力されます。

 

今回は以上です。

あー、また余計なアカウント作ってしまった。。。あれ?新規作成ならプロフィール設定もDefaultでよくね?(ま、いっか)

 

 

 

kampa.me