下記の記事で紹介した Selenium でgoogleログインする場合です。
ブラウザ操作を自動化する Selenium を Python から使う場合のメモ パソコン鳥のブログ
headlessモードかどうかで、googleログイン画面の要素が異なるようです。
ログインIDの入力箇所が、headlessモード時はID が Email、通常時は ID が identifierId となっています。
同様にパスワード入力箇所も、Passwd と password となっています。
そこで、headlessモードに関わらず動作OKにするには下記のように書きます。
XPATH 指定で、「//*[@id=”identifierId”]|//*[@id=”Email”]」のように、「|」で区切って書けば OR条件で書けます。
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions# Chromのパス(Linuxの場合)
CHROME_BIN = ‘/usr/bin/chromium-browser’
# Chromのパス(Windowsの場合)
CHROME_BIN = ‘C:\Program Files (x86)\Google\Chrome\Application\chrome.exe’
# Seleniumドライバーのパス(Linuxの場合)
CHROME_DRIVER = os.path.expanduser(‘chromedriver’)
# Seleniumドライバーのパス(Windowsの場合)
CHROME_DRIVER = os.path.expanduser(‘chromedriver.exe’)
# URL
URL = ‘https://accounts.google.com‘
# Chromeの初期設定
options = Options()
options.binary_location = CHROME_BIN
#options.add_argument(‘–headless’)
options.add_argument(‘–window-size=1024,768’)
driver = webdriver.Chrome(CHROME_DRIVER, chrome_options=options)
driver.get(URL)
element = WebDriverWait(driver, TIME_OUT).until(
expected_conditions.presence_of_element_located( (By.XPATH, ‘//*[@id=”identifierId”]|//*[@id=”Email”]’) )
)
element.send_keys( ‘XXXXXXX@gmail.com’ + Keys.ENTER )
element = WebDriverWait(driver, TIME_OUT).until(
expected_conditions.presence_of_element_located( (By.XPATH, ‘//*[@id=”password”]/div[1]/div/div[1]/input|//*[@id=”Passwd”]’) )
)
element.send_keys( ‘XXXXXXXXX’ + Keys.ENTER )
コメント