コンテンツへスキップ

Chrome操作

Chrome操作するときによく使うコードです。

インストールされているChromeに合ったドライバーを自動で取得しているため、ドライバーのメンテナンスが必要ありませんし、他のパソコンでも簡単に動きます。

# Selenium(Chrome操作)モジュール
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException


# Seleniumの設定
options = Options()
options.add_argument('--disable-gpu')
options.add_argument('--disable-extensions')
options.add_argument('--proxy-server="direct://"')
options.add_argument('--proxy-bypass-list=*')
options.add_argument('--start-maximized')
options.add_argument('--incognito')  # シークレットモードで起動
options.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])  # メッセージ非表示


# Webdriver_manager(Chromeドライバー)モジュール
from webdriver_manager.chrome import ChromeDriverManager
os.environ['WDM_SSL_VERIFY']='0'  # SSL verify 無効化
os.environ['WDM_PRINT_FIRST_LINE'] = 'False'  # ログの余分な空白防止
# Webdriver_managerのInsecureRequestWarning非表示
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
init_flag = False


# Chromeドライバーの起動
chrome_service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=chrome_service, options=options)



# URLの設定
url = "https://www.google.com/


# Chromeの起動
driver.get(url)


# ボタンをクリック(例)
target_css_1 = '#board > div > button'
target_css_2 = '#body > div.main_waku > table > tbody > tr > td.middle > button'
for i in range(20):
    try: 
        WebDriverWait(driver, 0.5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, target_css_1)))
        element = driver.find_element(by=By.CSS_SELECTOR, value=target_css_1)
        break
    except: 
        WebDriverWait(driver, 0.5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, target_css_2)))
        element = driver.find_element(by=By.CSS_SELECTOR, value=target_css_2)
        break
    else: 
        continue
element.click()


# 入力(例)
target_xpath = "//*[contains(@type,'email') and contains(@name,'loginfmt')]"
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH, target_xpath)))
element = driver.find_element(by=By.XPATH, value=target_xpath)
element.send_keys(selected_user)