0

プリンタにアクセスするスクリプトがあります。クロームが正常に動作してもコードは正常に動作しますが、ヘッドレスで実行されていると、ヘッドレスクロムでウェブページの要素を見つけることができません

ここに関連するコードです:

initメソッド:

def __init__(self, ip_address): 
    """ Initialize a new Printer_Webpage object.""" 
    self.ip_address = ip_address 
    chrome_options = Options() 
    chrome_options.add_argument("--headless") 
    chrome_options.add_argument("--disable-gpu") 
    chrome_options.add_argument("--window-size=1920x1080") 
    self.browser = webdriver.Chrome(chrome_options=chrome_options) 
    # Ignore lack of cert for each printer web page. 
    # Otherwise, can't open page. 
    self.browser.accept_untrusted_certs = True 

ログイン方法:

def login(self): 
    """Navigates through the login page for the printer.""" 
    # Open login page 
    self.browser.get(f'https://{self.ip_address}/wcd/top.xml') 
    # STEPS TO LOGIN: 
    # 1) Select 'Administrator' radio button and click. 
    self.browser.find_element_by_id('Admin').click() 
    # 2) Select Login button and click. 
    self.browser.find_element_by_xpath("//input[@type='submit' \ 
             and @value='Login']").click() 
    # 3) Select admin (user mode) 
    self.browser.find_element_by_id('R_ADM2').click() 
    # 4) Select password field and input PASSWORD, then submit. 
    password_field = self.browser.find_element_by_id('Admin_Pass') 
    password_field.send_keys(PASSWORD) 
    password_field.send_keys(Keys.RETURN) 

完全なエラーメッセージ:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"Admin"} 

そしてここでは、いくつかの他の情報があることだが、 m有用であることIGHT:

(Session info: headless chrome=62.0.3202.94) 

(Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.14393 x86_64) 
+0

ヘッドレスブラウザでスクリーンショットを撮ってください。最初に要素にスクロールするか、ヘッドレスブラウザのサイズを初期化するときにサイズを変更する必要があるかもしれません。十分な大きさでないと、サイトのサイズがモバイル用で、そのビューに管理リンクがありません。 –

+0

ウィンドウのサイズにカンマを使用します: '--window-size = 1920,1080'。スクリーンショットを撮ったり、ページからHTMLをダンプして、その要素が存在しない理由を理解してください。 –

+0

ウェブページが正しく読み込まれていないことがわかったので、空白のページを表示するだけです。正常に読み込むとき、ページは数秒間白いので、ロードするのに十分な時間を与えるためにtime.sleep(30)を使って試しましたが、それでも白いページとして表示されます。 –

答えて

0

それがSSL証明書の問題だ場合、あなたは(それはあなたがそれを開始している方法ですと仮定して)コマンドラインフラグを使用して本命ずにChromeを起動することができます。私はスイッチが--allow-running-insecure-contentであると信じており、私はこのリストから見つけたのはhereです。

関連する問題