我正在尝试在GCE(Google计算引擎)上出于硒目的运行Chrome浏览器,但收到的错误是:
ERROR:
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
(Driver info: chromedriver=2.26.436382 (70eb799287ce4c2208441fc057053a5b07ceabac),platform=Linux 4.9.0-9-amd64 x86_64)
我尝试安装2.26的Google chrome和Chrome驱动程序。在GCE上。已经在python代码中添加了--headless,-disable-dev-shm-usage,-no-sandbox等参数,但是错误保持不变。
FOR INSTALLING ! ! !
sudo apt-get install libxss1 libappindicator1 libindicator7
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome*.deb
sudo apt-get install -f
sudo apt-get install xvfb
sudo apt-get install unzip
wget -N http://chromedriver.storage.googleapis.com/2.26/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
# PYTHON CODE FOR PERFORMING SELENIUM TASKS #
chrome_options = Options()
chrome_options.add_argument("-disable-notifications")
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument("--window-size=1920x1080")
driver = webdriver.Chrome('/home/dev_baseh/finalpdf/chromedriver',chrome_options=chrome_options)
driver.get('https://www.investorslounge.com/stock-market/index-history')
我的问题是,当我发送chrome驱动程序的正确路径时,谷歌chrome也安装在GCE上,并且其扩展名在安装xvfb时无头运行,这为什么会给我错误? >
答案 0 :(得分:1)
首先,尝试使用ChromeOptions()
而不是Options()
。同样在Linux中,我认为您需要首先启动显示。
请尝试以下操作:
from selenium import webdriver
from pyvirtualdisplay import Display
display = Display(visible=0, size=(1920, 1080))
display.start()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("-disable-notifications")
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument("--window-size=1920x1080")
driver = webdriver.Chrome('/home/dev_baseh/finalpdf/chromedriver', chrome_options=chrome_options)
driver.get('https://www.investorslounge.com/stock-market/index-history')
答案 1 :(得分:0)
我的问题是,当我发送chrome驱动程序的正确路径时...
关于Chrome及其路径的一句话...我发现Chrome随发行版和版本而变化很多。
这是我的一段代码的样子。它在Armbian,Debian,Fedora和Ubuntu上运行良好。
def get_chrome():
if os.path.isfile('/usr/bin/chromium-browser'):
return '/usr/bin/chromium-browser'
elif os.path.isfile('/usr/bin/chromium'):
return '/usr/bin/chromium'
elif os.path.isfile('/usr/bin/chrome'):
return '/usr/bin/chrome'
elif os.path.isfile('/usr/bin/google-chrome'):
return '/usr/bin/google-chrome'
else:
return None
然后:
opts = Options()
opts.binary_location = get_chrome()
opts.add_argument('--headless')
opts.add_argument('--no-sandbox')
opts.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(chrome_options=opts)
我不使用Amazon或Google云,所以我不知道Amazon或Google在其云或图像中正在做什么。我希望get_chrome()
可以正常工作,除非它是一个不寻常的配置。