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)