質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

5171閲覧

pythonのstring indices must be integersというエラーについて

unowen

総合スコア17

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2018/09/17 14:33

編集2018/09/17 14:51

seleniumでchromeにアクセスし、スマホ版を表示させるテストをおこなっています。

参考リンク

にある

Python

1from selenium import webdriver 2mobile_emulation = { "deviceName": "Nexus 5" } 3chrome_options = webdriver.ChromeOptions() 4chrome_options.add_experimental_option("mobileEmulation", mobile_emulation) 5driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub', 6 desired_capabilities = chrome_options.to_capabilities())

の「http://127.0.0.1:4444/wd/hub」のところをアクセス先である「http://nicovideo.jp/」に変更して使ってみたのですが

python

1driver = webdriver.Remote(command_executor='http://nicovideo.jp/', 2 desired_capabilities = chrome_options.to_capabilities())

のところで 「Exception has occurred: TypeError
string indices must be integers」と出てきてしまいます。
もともと引数に整数値は入らないと思うのですが、どなたか分かる方いらっしゃいますか?

サンプルにある「http://127.0.0.1:4444/wd/hub」というURLはアクセス先に変えてもいいのでしょうか。

追記 : ご指摘ありがとうございます。
コマンドプロンプトにでたエラーです

python

1DevTools listening on ws://127.0.0.1:54013/devtools/browser/255648f5-1d00-46c4-bcf2-851ad6ba1d0d 2Traceback (most recent call last): 3 File "C:\python\brow.py", line 15, in <module> 4 driver = webdriver.Remote(command_executor='http://nicovideo.jp/',desired_capabilities = chrome_options.to_capabilities()) 5 File "C:\Users****\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\remote\webdriver.py", line 156, in __init__ 6 self.start_session(capabilities, browser_profile) 7 File "C:\Users****\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\remote\webdriver.py", line 254, in start_session 8 self.session_id = response['sessionId'] 9TypeError: string indices must be integers

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/09/17 14:39

エラーとして出力される情報はそれがすべてですか?
unowen

2018/10/02 08:37 編集

///
hayataka2049

2018/09/17 14:48

なるほど、とりあえず修正依頼欄は見づらいので質問文にそれを追記しておいてください
unowen

2018/10/02 08:37 編集

追加
guest

回答2

0

ベストアンサー

seleniumでchromeのスマホ版を表示させるためには、webdriverが必要なようです。

そのためには、seleniumのダウンロードのページ からselenium-server-standalone-x.xx.jar をダウンロードしてきて、seleniumサーバを先に起動しておく必要があります。

java -jar selenium-server-standalone-x.xx.jar

python側のコードは以下のようにしたらいいと思っています。

python

1from selenium import webdriver 2mobile_emulation = { "deviceName": "Nexus 5" } 3chrome_options = webdriver.ChromeOptions() 4chrome_options.add_experimental_option("mobileEmulation", mobile_emulation) 5driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub', 6 desired_capabilities = chrome_options.to_capabilities()) 7driver.get("http://nicovideo.jp/")

しかし、自分のPCでは以下のエラーが出て動作しません。まだ、修正が必要と思われます。 selenium.common.exceptions.SessionNotCreatedException: Message: Unable to create new service: ChromeDriverService

なお、pyppeteerを使えば、次のようなコードでchromeのスマホ版を表示させることができています。pyppeteerのインストールは、pip install pyppeteerだけでchromiumもインストールされます。

python

1import asyncio 2from pyppeteer import launch 3 4async def main(): 5 browser = await launch(headless=False) 6 page = await browser.newPage() 7 await page.emulate( 8 { 9 'userAgent': 10 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) ' 11 'Version/11.0 Mobile/15A372 Safari/604.1', 12 "viewport": 13 { 14 'width': 414, 15 'height': 736, 16 'deviceScaleFactor': 3, 17 'isMobile': True, 18 'hasTouch': True, 19 'isLandscape': False 20 } 21 } 22 ) 23 await page.goto('https://example.com') 24 25asyncio.get_event_loop().run_until_complete(main())

投稿2018/10/06 11:30

YasuhiroNiji

総合スコア584

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unowen

2018/10/20 12:07

pyppeteer の存在を教えていただきありがとうございます。 元のプログラムは現在も不完全なのですが参考にさせていただきます。
guest

0

webdriver#Remoteってseleniumサーバを立てる必要があるんですよね。
このケースだとChromeドライバもしくはFireFoxドライバを用意し、そちらを試した方がリーズナブルでは?

投稿2018/09/17 15:50

tebonz

総合スコア198

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問