2016-07-16 13 views
1

Chrome用Selenium WebDriverを使用して、2つの異なるプロファイル(プロファイル1とプロファイル2)プロファイル1の最初のインスタンスが正常に開きます。しかし、プロファイル2でChromeの2番目のインスタンスを開こうとすると、エラーが発生します。PythonでChrome用Selenium Webドライバを使用して2つのGoogle Chromeインスタンスを開くことはできません

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.chrome.options import Options 

#Profile Directory for Google Chrome 
dataDir = "--user-data-dir=C:\\Users\\Myname\\AppData\\Local\\Google\\Chrome\\User Data" 

#Setting the Chrome options for Profile 1 
chrome_options1 = Options() 
chrome_options1.add_argument(dataDir) 
chrome_options1.add_argument("--profile-directory=Profile 1") 
driver1 = webdriver.Chrome(chrome_options=chrome_options1) 

#This opens www.google.com sucessfully 
driver1.get('https://www.google.com') 


#Setting the Chrome options for Profile 2 
chrome_options2 = Options() 
chrome_options2.add_argument(dataDir) 
chrome_options2.add_argument("--profile-directory=Profile 2") 
#The below line throws an error (Cannot move the Shared Cache) 
driver2 = webdriver.Chrome(chrome_options=chrome_options2) 

#This line is not reached as there is error in creating driver2 itself 
driver2.get('https://www.google.com') 

ここで私が取得していますエラーがあります:

は、ここに私のPythonコードです

[1076:11808:0716/182552:ERROR:cache_util_win.cc(20)] Unable to move the cache: 0 

[1076:11808:0716/182552:ERROR:cache_util.cc(134)] Unable to move cache folder C: 
\Users\Myname\AppData\Local\Google\Chrome\User Data\ShaderCache\GPUCache to C:\U 
sers\Myname\AppData\Local\Google\Chrome\User Data\ShaderCache\old_GPUCache_000 

[1076:11808:0716/182552:ERROR:cache_creator.cc(129)] Unable to create cache 
[1076:11808:0716/182552:ERROR:shader_disk_cache.cc(589)] Shader Cache Creation failed: -2 

私はクロームの最初のインスタンスは、(のための共有キャッシュフォルダをロックしているため、エラーがあると思います書き込み)。したがって、2番目のインスタンスが同じ共有フォルダを開こうとすると、エラーがスローされます。

これに対応する方法はありますか?

私の目標は、2つの異なるプロファイルで同時に2つのChromeインスタンスを開くことです。

ヘルプは評価されています。

答えて

4

これはまだあなたに関連する、あなたは、Pythonを使用して、私のソリューションはまた、あなたのために働く場合、私はR.

を使用するのに対し、私が使用してRに自動化されたウェブ・スクレイピングのためのコードを書かれている場合、私は知りませんChromeウェブドライバを備えたRSeleniumパッケージあなたと同じように、Google Chromeの複数のインスタンスをさまざまなGoogle Chromeプロファイル(「プロファイル1」と「プロファイル2」)で同時に使用したいので、それに応じてGoogle Chromeで作成しました。 Rは2つのプロファイルのうちの1つを使ってセレンウェブドライバを簡単に開くことができます。 「プロフィール1」(これはRであることに注意してください):

# Define profile directory: 
prof1 <- getChromeProfile("~/Users/<username>/AppData/Local/Google/Chrome/User Data", "Profile 1") 

#Set up remote driver with according chrome profile (prof1): 
remDr <- remoteDriver(browserName = "chrome", extraCapabilities = prof1) 

#Open remote driver: 
remDr$open() 

... Google Chromeのプロファイルは同時にはありません。正確に言えば、2番目のプロファイル、つまり「プロファイル2」を使用してクロームの2番目のインスタンスを開くと、私のコンソールと2つのウェブドライバが凍ってもう回復しませんでした。

マイソリューション:

ソリューションは非常に簡単だった:私は(Google Chromeはそれらを作成した)彼らのデフォルトの場所からGoogle Chromeのプロファイルフォルダ(「プロファイル1」と「プロファイル2」)の両方を移動します自分のコンピュータ上の別のディレクトリにコピーし、新しく作成した親フォルダに保存します。私は例を提供してみましょう:

デフォルトのGoogleクロームのプロファイルの場所を(「プロファイル1」と「プロファイル2」は、Google Chromeで作成された):

"~/Users/<username>/AppData/Local/Google/Chrome/User Data/Profile 1" 
"~/Users/<username>/AppData/Local/Google/Chrome/User Data/Profile 2" 

私は新しいに私の「ドキュメント」フォルダに移動親フォルダ:

"~/Users/<username>/Documents/Google Chrome Profile 1/Profile 1" 
"~/Users/<username>/Documents/Google Chrome Profile 2/Profile 2" 

新しいフォルダ「Google Chrome Profile 1」と「Google Chrome Profile 2」は、前述の親フォルダです。

これはなぜ機能しますか?

デフォルトのGoogle Chromeでは、それぞれのプロファイルフォルダからのプロファイル情報だけでなく、親フォルダ内の「共有」場所からもプロファイル情報が使用されるようです。2つ(またはそれ以上)のプロファイルがそのような共有フォルダから情報を実行した場合、それは乱雑になる可能性があり、対応するWebドライバがスタックしてコンソールにエラーが発生します。

これは新しい場所で、新しい親フォルダ「Google Chrome Profile 1」と「Google Chrome Profile 2」にプロファイルフォルダを保存した理由です。このように私は4つの独立したクロムインスタンスを異なるプロファイルで並列に実行することができます(すべてが独自のクッキーと履歴を持ちます)。

私はこれがうまくいきたいと思います。

+0

ありがとうございました!ここに私がしたことがあります。あなたが言及したように、私はプロファイルフォルダ(Profile1とProfile2)を分離し、それらを異なる親フォルダに配置しました。これらのプロファイルパスを持つ2つのChromeインスタンスを開くためにPythonスクリプトを実行すると、自動的に共有フォルダ(ShaderCache)が作成されました。 –

関連する問題