web-dev-qa-db-ja.com

セレンはChromeで動作しますが、ヘッドレスではありませんChrome

Seleniumと最初はPhantomJSを使用して、いくつかのPythonスクリプトを開発しました。自動ダウンロードに向かう間、Firefoxに切り替えて(動作しました)、次にChromeヘッドレスオプションを使用すると、目の前でブラウザを開くことができなくなります。

ページといくつかのHTML要素にアクセスする最初のスクリプトは、ヘッドレスChromeで完全に動作します。

ただし、2番目はChromeの見出しでのみ機能しますです。 「ヘッドレス」オプションを追加すると、機能しなくなります。 HTMLをヘッドレスモードで印刷して、探しているHTML要素が見つからない理由を確認しようとすると、私が持っているのは次のとおりです。

<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>

Chromeに向かって、完全なHTMLを印刷しました。これは私が私のヘッドレスを開始する方法ですChrome:

options = webdriver.ChromeOptions()
options.add_argument("--ignore-certificate-errors") 
options.add_argument("headless") 
driver = webdriver.Chrome(chrome_options=options)

繰り返しますが、これは別のスクリプトで機能することに注意してください。ここでの唯一の違いは、ページにアクセスするためにログインする必要があることですが、それでもヘッドで動作するのはなぜですか?私のスクリプトは、フォームに記入することで自動的にログインするように作られています。

Python:3.6.1、Chrome:60.0.3112.78(64ビット)、Selenium:3.4.3

何か案が?ありがとう。

**編集:コードの始まりです**

url = 'https://10.11.227.21/tmui/'
driver.get(url + "login.jsp")

html_source = driver.page_source
print(html_source)

blocStatus = WebDriverWait(driver, TIMEOUT).until(EC.presence_of_element_located((By.ID, "username")))
inputElement = driver.find_element_by_id("username")
inputElement.send_keys('actualLogin')
inputElement = driver.find_element_by_id("passwd")
inputElement.send_keys('actualPassword')
inputElement.submit()
12
Gnougnou

私はあなたと同じ経験をしましたが、xvfbとpyvirtualdisplayを使用して解決しました。

Chromedrive = v2.3.1、chrome-browser = v60、Selenium = 3.4.3を使用します

ヘッドレスクロムでは、スクリプトの一部が期待どおりに機能しないようです。

https://Gist.github.com/addyosmani/5336747 のvpassaperaのコメントを参照してください。

以下のように試してみてください、

from pyvirtualdisplay import Display

display = Display(visible=0, size=(800, 600))
display.start()

# Do Not use headless chrome option
# options.add_argument('headless')

url = 'https://10.11.227.21/tmui/'
driver.get(url + "login.jsp")

html_source = driver.page_source
print(html_source)

blocStatus = WebDriverWait(driver,    TIMEOUT).until(EC.presence_of_element_located((By.ID, "username")))
inputElement = driver.find_element_by_id("username")
inputElement.send_keys('actualLogin')
inputElement = driver.find_element_by_id("passwd")
inputElement.send_keys('actualPassword')
inputElement.submit()

display.stop()

「pyvortualdisplay」を使用するにはxvfbが必要です

$ Sudo apt-get install -y xvfb 
5
frank

Headless Chromeは安全でない証明書をサポートしていないため、安全でない証明書を持つWebサイトは空白のままでは開きません。次のように機能を追加する必要があります。

from Selenium import webdriver
from Selenium.webdriver import DesiredCapabilities
from Selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")

capabilities = DesiredCapabilities.CHROME.copy()
capabilities['acceptSslCerts'] = True 
capabilities['acceptInsecureCerts'] = True

driver = webdriver.Chrome(chrome_options = chrome_options,executable_path='your path',desired_capabilities=capabilities)
driver.get("yourWebsite")

これは作業を行います。

5
Suraj Regmi

同じマシンでは、headless chromeはheadedよりも速い場合があります。パスワード要素を見つける前に待機を追加してみてください。

1
mmichalik