前提・実現したいこと
初心者です。
(初心者ゆえ言葉遣い等に不安があったために Qiita の Vagrantを使って起動した仮想マシン(ubuntu)からWindowsのChromeを自動操作したい に使われている言葉を大幅に拝借させていただいております)
いま、Vagrant を用いて起動した仮想マシン (Ubuntu) 上の Selenium (Python) から、ホスト (仮想マシンを実行している Windows10) 上の Chrome にリモートアクセスしようとしています。
環境は以下の通りです。
仮想マシン
- Ubuntu 18.04.5 LTS (64bit)
- Python 3.7.5
- Selenium 3.141.0
物理マシン
- Windows10 (64bit)
- VirtualBox 6.1.26
- ChromeDriver 94.0.4606.41
-- chromedriver_win32.zip を選び chromedriver.exe に解凍。
-- C:/Windows/System32/ に置いた。
-- ※ このディレクトリはcmdで >echo %PATH%
とやって出てきた場所(つまりパスの通った場所)です。
- GoogleChrome 94.0.4606.61 (64bit)
教本(加藤耕太著『Python クローリング&スクレイピング[増補改訂版]』第2版)に忠実にしたがってコーディング・実行したのですが、以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
PowerShell
1(VE1) vagrant@ubuntu-bionic:/vagrant/notion2pdf$ python test.py 2Traceback (most recent call last): 3 File "test.py", line 18, in <module> 4 open_driver('https://www.python.org') 5 File "test.py", line 7, in open_driver 6 driver = Remote('http://10.0.2.2:4444', options=options) 7 File "/home/vagrant/VE1/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__ 8 self.start_session(capabilities, browser_profile) 9 File "/home/vagrant/VE1/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session 10 response = self.execute(Command.NEW_SESSION, parameters) 11 File "/home/vagrant/VE1/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute 12 self.error_handler.check_response(response) 13 File "/home/vagrant/VE1/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 208, in check_response 14 raise exception_class(value) 15selenium.common.exceptions.WebDriverException: Message: Host header or origin header is specified and is not whitelisted or localhost. 16 17(VE1) vagrant@ubuntu-bionic:/vagrant/notion2pdf$
該当のソースコード
cmd
1>chromedriver.exe --port=4444 2```によって ChromeDriver を起動させたうえで、 3```Python 4from selenium.webdriver import Chrome, ChromeOptions, Remote 5 6def open_driver(url): 7 global driver 8 options = ChromeOptions() 9 options.headless = True 10 driver = Remote('http://10.0.2.2:4444', options=options) 11 driver.get(url) 12 13def close_driver(): 14 global driver 15 driver.close() 16 driver.quit() 17 18if __name__ == '__main__': 19 driver = None 20 try: 21 open_driver('https://www.python.org') 22 # ここになんらかの処理 23 finally: 24 if driver != None: 25 close_driver() 26```を実行しました。 27 28### 試したこと 29 30本投稿冒頭に書いたサイトを参考に、 31```cmd 32>chromedriver.exe --port=4444 --allowed-ips 33```としましたが、エラーメッセージは変わりませんでした。 34 35### 補足情報 36 37それから冒頭サイトにもあるとおり大前提として、事前に vagrantfile の設定がなされ、`vagrant up` によって仮想マシンが起動しています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。