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()
私はあなたと同じ経験をしましたが、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
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")
これは作業を行います。
同じマシンでは、headless chromeはheadedよりも速い場合があります。パスワード要素を見つける前に待機を追加してみてください。