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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

Q&A

1回答

2221閲覧

seleniumである型のjsonを取得する方法が分からない

s_tatsuki

総合スコア44

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2022/05/02 08:02

pythonのseleniumにて

下記のjsonから

js

1<script type="text/javascript"> 2window.__additionalDataLoaded('', 3{ 4 "items": [ 5 { 6 ここ省略 7 } 8 ] 9} 10</script>

以下の部分だけ、取得したい場合に何かいい方法はないでしょうか?

json

1{ 2 "items": [ 3 { 4 ここ省略 5 } 6 ] 7}

python

1 di = driver.execute_script('return window.__additionalDataLoaded') 2 data = json.dumps(di) 3 print(data) 4

上記のように書いても
json形式として認識しないため、空文字がレスポンスされている挙動になり困っています。

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

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

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

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

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

meg_

2022/05/02 09:05

質問タグに「Python2.7」「Python3.X」とありますが、両者で動作するコードが必要ということでしょうか?
quickquip

2022/05/02 09:13 編集

</script> の上の部分、閉じ丸括弧を省略して書いていませんか?
s_tatsuki

2022/05/02 09:21

すみません閉じ括弧抜けています
s_tatsuki

2022/05/02 09:22

すみません閉じ括弧抜けています
s_tatsuki

2022/05/02 09:23

Pythonのバージョンは3系で動作するコードが必要です
guest

回答1

0

sample.html

html

1<script type="text/javascript"> 2var hogehoge = 3{ 4 "fuga": [ 5 { 6 "foo": "bar" 7 } 8 ] 9} 10</script> 11 12<script type="text/javascript"> 13window.__additionalDataLoaded('', 14{ 15 "items": [ 16 { 17 "ここ省略": "" 18 } 19 ] 20} 21</script>

python

1from selenium import webdriver 2from selenium.webdriver.chrome import service as fs 3import json 4import re 5import os 6 7chrome_service = fs.Service() 8driver = webdriver.Chrome(service=chrome_service) 9 10url = rf'file://{os.path.dirname(__file__)}/sample.html' 11driver.get(url) 12 13script = driver.execute_script("return document.getElementsByTagName('script')") 14 15data = '' 16for s in script: 17 inner = s.get_attribute('innerHTML') 18 data = re.findall(r'window.__additionalDataLoaded.*?({.+})', inner, 19 re.MULTILINE | re.DOTALL) 20 if data: 21 data = data[0] 22 break 23 24if data: 25 print(data) 26 27# 28{ 29 "items": [ 30 { 31 "ここ省略": "" 32 } 33 ] 34}

投稿2022/05/02 10:31

編集2022/05/02 12:47
melian

総合スコア19618

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

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

s_tatsuki

2022/05/02 12:09

ありがとうございます。 ただ今回の場合、複数スクリプトタグが埋め込まれているページになるので、 getElementsByTagName('script') だと特定できないと思うのですが、 何かこれを指定する方法はありますか? idなどは特に振られておらず、どのようにすればいいか困っています。。。 <script type="text/javascript">window.__initialDataLoaded(window._sharedData);</script> ここに今回のjson <script type="text/javascript"> (function(){ 省略 } </script>
melian

2022/05/02 12:49

回答を更新しました。まずは全ての script タグを読み込んで、文字列 window.__initialDataLoaded が含まれているかどうかをチェックする方法が考えられます。
s_tatsuki

2022/05/02 15:22

早々にご回答いただきありがとうございます。 こちらについてですが、 少しまた上手く動作せず自分の方では原因が理解できず 以下URLのようなインスタの投稿ないにある window.__initialDataLoaded 内のjsonだけを抜き出したいです。。。 https://www.instagram.com/p/CcuFwDwPiHb
melian

2022/05/02 23:15

そちらを見ますと、window.__initialDataLoaded は JavaScript の関数で、中身はコードになっています。実際には window.__initialDataLoaded 関数の実行結果を取得するのではないでしょうか?
s_tatsuki

2022/05/03 10:09

背景の部分を申しますと、ある投稿のURLから投稿者のuserIDと、フォロワー数というのを抜き出すのがゴールでした。以前までは di = driver.execute_script('return window._sharedData') data = json.dumps(di) このコードで抜き出せてたんですが、 構成が変わったのか、エラーに流れていたので、 今回この質問をさせていただきました。
s_tatsuki

2022/05/03 10:12

JavaScript のコードを読んでいて気がついたのですが、抜き出したい JSON データというのは、 https://www.instagram.com/data/shared_data/ ですか? →こちらについての回答ですが、 そうですね。このような、usernameと出来ればフォロワー数が入ったjsonデータを抜き出したいです。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問