TransWikia.com

seleniumのheadlessモードを使用した時に、iTunes Connectのログインページのスクショを取得したい

スタック・オーバーフロー Asked by sugato on December 9, 2021

検証したこと

  • headlessモードの部分をコメントアウトして実行
    ⇒メアドやパスワードを入力してclickする部分も、問題なく動作する

  • chromeのトップページにheadlessモードでアクセスし、スクリーンショットを取れるか検証
    ⇒問題なく取得できた

以上のことから、iTunes Connectのサイト都合なのか、それ以外で回避方法あるのか教えていただけると幸いです。

フロントのことはほとんど分からないので、この辺りを調べてみると良いかも、ぐらいのアドバイスでも嬉しいです。

よろしくお願いします。

(2020年7月28日追記)

  • chromedriver-binaryとChromeDriverのバージョンを、84.0.4147.30に変更して検証を行いましたが、結果は変わらずでした

環境

  • windows10
  • python : 3.8
  • Google Chrome:バージョン : 84.0.4147.89(Official Build) (64 ビット)
  • chromedriver-binary : 83.0.4103.14
  • ChromeDriver : 83.0.4103.14
    https://chromedriver.chromium.org/downloads
  • selenium : 3.141.0

headlessモードで実行した際のエラーメッセージ

$ python save_ss_headless.py

DevTools listening on ws://127.0.0.1:52996/devtools/browser/16df0db5-7204-4ce7-ac85-fb9c8dff6275
[0723/173124.264:INFO:CONSOLE(2)] "Metrics config: No config provided via delegate or fetched via init(), using default/cached config values.", source: https://itunesconnect.apple.com/static/compiled/js/itunesconnect.min.13f6834e19c35e8917d9.js (2)
[0723/173124.267:INFO:CONSOLE(2)] "Metrics config: No config provided via delegate or fetched via init(), using default/cached config values.", source: https://itunesconnect.apple.com/static/compiled/js/itunesconnect.min.13f6834e19c35e8917d9.js (2)
[0723/173124.275:INFO:CONSOLE(2)] "mt-perfkit: unable to apply time offsets: environment.timeOriginOffset() returned a non-number value", source: https://itunesconnect.apple.com/static/compiled/js/itunesconnect.min.13f6834e19c35e8917d9.js (2)
[0723/173124.278:INFO:CONSOLE(2)] "mt-perfkit: unable to apply time offsets: environment.timeOriginOffset() returned a non-number value", source: https://itunesconnect.apple.com/static/compiled/js/itunesconnect.min.13f6834e19c35e8917d9.js (2)
[0723/173124.281:INFO:CONSOLE(2)] "mt-perfkit: unable to apply time offsets: environment.timeOriginOffset() returned a non-number value", source: https://itunesconnect.apple.com/static/compiled/js/itunesconnect.min.13f6834e19c35e8917d9.js (2)
[0723/173124.284:INFO:CONSOLE(2)] "mt-perfkit: unable to apply time offsets: environment.timeOriginOffset() returned a non-number value", source: https://itunesconnect.apple.com/static/compiled/js/itunesconnect.min.13f6834e19c35e8917d9.js (2)
[0723/173124.288:INFO:CONSOLE(2)] "mt-perfkit: unable to apply time offsets: environment.timeOriginOffset() returned a non-number value", source: https://itunesconnect.apple.com/static/compiled/js/itunesconnect.min.13f6834e19c35e8917d9.js (2)
[0723/173125.680:INFO:CONSOLE(2)] "Metrics config: No config provided via delegate or fetched via init(), using default/cached config values.", source: https://itunesconnect.apple.com/static/compiled/js/itunesconnect.min.13f6834e19c35e8917d9.js (2)

実行コード

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
import chromedriver_binary
import os

options = webdriver.ChromeOptions()
options.add_argument('--headless')
# options.add_argument('--no-sandbox')
# options.add_argument('--disable-gpu')
# options.add_argument('--incognito')
# options.add_argument("window-size=1920,1080")

mail_account = '設定したメールアドレス'
password = '設定したパスワード'

driver = webdriver.Chrome(executable_path='chromedriver', options=options)
base_url = 'https://itunesconnect.apple.com/login'
# base_url = 'http://www.google.com/'
driver.get(base_url)
time.sleep(10) 
# log配下にスクリーンショットを保存
ss_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "./log/")
driver.save_screenshot(ss_dir + 'app_store_login_page' + ".png")
# print('1/5')
# iframe = driver.find_element_by_css_selector('#aid-auth-widget-iFrame')
# driver.switch_to.frame(iframe)
# print ("2/5")
# time.sleep(5)
# driver.find_elements_by_css_selector("#account_name_text_field")[0].send_keys(mail_account)
# driver.find_elements_by_css_selector("#sign-in")[0].click()
# print ("3/5")
# time.sleep(5)
# driver.find_elements_by_css_selector("#password_text_field")[0].send_keys(password)
# driver.find_elements_by_css_selector('#sign-in')[0].click()
# time.sleep(5)
# print ("4/5")
driver.close()
driver.quit()

One Answer

kunif さんから頂いたコメントを参考にしたところ、問題を解消できたので回答に記載します。

以下のサイトを参考にuser-agentを調べたところheadlessモードでも実行できました!

起動オプション - Google Chrome まとめWiki

--user-agent="<ユーザーエージェント文字列>"

ユーザーエージェントを偽装して他のブラウザに見せかけます。

私の方で追加で調べて参考にさせていただいた記事

pythonでUA偽装してseleniumでブラウジング - Qiita

ここで入力するバージョンが気になったので、記事内のリンクに遷移
一番新しいchromeのバージョンが83だったのですが、ChromeDriverのバージョンを84.0.4147.30に変更していたので、chromeのバージョンに対応させる形に変更

Chrome User Agents - WhatIsMyBrowser.com

上記サイトのUserAgent一覧を参考に下記を追加したところ、headlessモードでも問題なく実行できました!

options.add_argument('--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36')

引数の一覧記事を貼っていただいたので、こちらの引数にあたりを付けることができました。

コメントいただきありがとうございました!

Answered by sugato on December 9, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP