3台のうち2台のコンピューターでコードを実行しようとすると、このエラーが発生します。
[0502/155335.565:ERROR:gpu_process_transport_factory.cc(1007)] Lost UI shared context.
コードは次のとおりです。
from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options
import os
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=1920x1080")
chrome_driver = os.getcwd() + "\\chromedriver.exe"
print "chrome driver:" + chrome_driver
driver = webdriver.Chrome(chrome_options=chrome_options,
executable_path=chrome_driver)
driver.get("http://www.google.com")
luck_button = driver.find_element_by_css_selector("[name=btnI")
luck_button.click()
driver.get_screenshot_as_file("capture.png")
すべてのシステムをチェックしました。Windows10 64ビット、google chrome 64ビットバージョン:66.0.3359.139、python 2.7 32-ビット、chromedriver.exe 32ビット、pycharm 2018.1.1
面白いのは、ヘッドレスオプションなしでこれを実行すると、すべてが機能することです。ブラウザがポップアップし、I'm feeling lucky
ボタンを押して、スクリーンショットを撮ります。このエラーは、ヘッドレスビットを追加した場合にのみ発生します。
他のシステムが同じソフトウェアを実行しているときにこれが機能する可能性がある1つのシステムで何が違うのかはわかりません。
Headless Chromeが最初にGA(General Availability)by Google Teamとしてリリースされたとき_記事 Getting Started with Headless Chrome
が言及した:
--disable-gpu \ # Temporarily needed if running on Windows.
次のメモが追加されました。
現在、Windows上で実行している場合は、
--disable-gpu
フラグも含める必要があります。
議論によると Headless: make --disable-gpu flag unnecessary
明らかでした:
LinuxまたはMac OSXでは、
--disable-gpu
フラグは不要になりました。バグSwiftShader fails an assert on Windows in headless mode
が修正されるとすぐに、Windowsでも不要になります。
議論によると headless: Switch from osmesa to SwiftShader
Google/ChromiumチームはSwiftShaderwithChrome =チームはGL content in Headless Modeをレンダリングするために使用を開始することを考えました。これには、次のようにいくつかの変更が必要でした。
Support WebGL in headless
へのアイデアはまだ議論中ですが、 SwiftShader fails an assert on Windows in headless mode
のようなエラーがあります:
[0117/125830.649194:ERROR:gpu_process_transport_factory.cc(1043)] Lost UI shared context.
DevTools listening on ws://127.0.0.1:37429/devtools/browser/1f0b2bf7-dfdd-44ac-9da7-f2659d352f0d
このエラーは@Test
には影響しません。当面はエラーを無視できます。
同じ問題がありました。これらのフラグをChromeドライバーオプションに追加してみてください。
options.add_arguments("--proxy-server='direct://'");
options.add_arguments("--proxy-bypass-list=*");