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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1790閲覧

WEB画面に表示されている文章などが、ソースの中に存在しない

kimukimu009

総合スコア33

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/01/09 10:58

編集2020/01/12 03:18

以下の、WEB画面に表示されている文章や単語が、ソースの中に存在しないという事象があります。

■具体的なWEB画面の中身と、サービス仕様(あくまでのイメージです。)

(WEB画面の中身)
1.購入者と連絡内容を、以下のところから選択してください。
□注文の詳細を確認する
□大型または重量商品の配送を調整する
□返品リクエストに関する連絡
□返金
□その他

2.上記のラジオボタンのいづれかを、選択すると、画面の下に、新たな入力フォームなどが出現し、
その中に文字を入力することができる。

3.送信ボタン押下で、上記の内容を送信する。

■やってみたこと、わからないこと:
1の段階でも、2の段階でも、そのソースファイルを表示させて、htmlを確認したが、ラジオボタンに
ある文言が、見当たらない。
例えば、「その他」のところのHTML構文を確認しにいっても、「その他」という文字がソースファイルの中に、存在しない。
(GoogleCromeのソース表示→Ctr+Fで、検索文字入力画面を出し、「その他」を入力しても、見当たらない。)

■質問内容:
このようなことは、ありえるのでしょうか?

■そもそも、なぜ、こういうことをしているのか?
pyhton(selenium)で、自動的にラジオボタン押下したいので、pythonプログラムをつくりましたが、
押下できませんでした。

したがって、押せない理由を探っています。

そもそもHTMLファイルの中に、ラジオボタンの文言が存在しない。(デベロッパーツールで、ラジオボタンのxpathは存在しているにもかかわらず)から、押せないのではないかという仮説にたっています。

■ここからが、最初の質問から、追記(編集)しているところ



上記の質問に対して、いくつかのご回答をいただきましたので、まずは、まとめます。

【ご回答1】
・maisumakun様から:「SPA(Single Page Application)」により、ほぼ完全に
JavaScriptで構築してしまって、HTMLには最低限のタグしかない、というような実装もありえる。

 →その場合は、HTMLタグの中に、「その他」のような文言がでてこないことが
あり得るということです。

【ご回答2】
・また、他のご回答者(m.ts10806様)の方から、今回の私が質問を行ったそもそもの理由(pyhton(selenium)で自動化ができない)
の部分にて、ご回答をいただきました(具体的なソースなどがないと判断できない)ので、以下に、追記させていただきます。xpathのパターンを2パターン、記載いたします。

■HTMLファイルの中身(かなり複雑なので、抜粋して記載)

具体的なソースファイル(ソースファイルを記載していますが、一部です。)

<!doctype html> <!--[if IE 8]><html data-19ax5a9jf="dingo" lang="ja-JP" class="a-no-js a-lt-ie10 a-lt-ie9 a-ie8"><![endif]--><!--[if IE 9]><html data-19ax5a9jf="dingo" lang="ja-JP" class="a-no-js a-lt-ie10 a-ie9"><![endif]--><!--[if !(IE 8)&!(IE 9)]><!--><html data-19ax5a9jf="dingo" lang="ja-JP" class="a-no-js"><!--<![endif]--><head><script>var aPageStart = (new Date()).getTime();</script><meta charset="utf-8"/> <script type='text/javascript'>var ue_t0=ue_t0||+new Date();</script> <div id="athena-widget-container"></div> 、 、 <div id="sc-masthead" class="clearable"> 、 、 <!-- →→■■ここ!!■■「※ラジオボタンがあるコンテンツを読み込んでいると思われるjavascript --> <script type="text/javascript">if(typeof uet == "function"){uet('ne');}</script></div><div id="sc-content-container"> <div id="ayb-app"></div> </div><div id="sc-footer-container">


■pythonファイル

# seleniumを使う準備 from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() PROFILE_PATH = r'C:\Users\motoc\AppData\Local\Google\Chrome\User Data' options.add_argument('--user-data-dir=' + PROFILE_PATH) driver = webdriver.Chrome(options=options) #その他の試し1 driver.get("https://sellercentral-japan.amazon.com/messaging/contact?orderID=250-4522981-2115804&marketplaceID=A1VC38T7YXB528") driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]').click()

■HTMLソース(デベロッパーツールで、検証→該当場所を探り、copy→xpathのフルパスコピー)

<span class="kat-radiobutton-icon" role="radio" aria-details="31w2kk6hn8" aria-label="大型または重量商品の配送を調整する" tabindex="0" aria-checked="true"></span>

■XPATH

/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[1]/span

■エラー内容1(パターン1)

DevTools listening on ws://127.0.0.1:56966/devtools/browser/85a7fa7d-467a-4f88-8fb3-c052f70a6a6a Traceback (most recent call last): File "C:\Users\motoc\OneDrive\デスクトップ\radio2.py", line 14, in <module> driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[1]/span').click() File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath return self.find_element(by=By.XPATH, value=xpath) File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element return self.execute(Command.FIND_ELEMENT, { File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[1]/span"} (Session info: chrome=79.0.3945.117) [10396:12376:0110/153344.524:ERROR:native_message_process_host.cc(344)] Error when writing to Native Messaging host: -101

■HTMLソース(デベロッパーツールで、検証→該当場所を探り、copy→xpathのフルパスコピー)

<kat-label class="text" for="b41lx6rqbq" text="大型または重量商品の配送を調整する"><label for="b41lx6rqbq"><span class="emphasis kat-label-hide"></span><span class="text">大型または重量商品の配送を調整する</span></label></kat-label>

■XPATH

/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]

■エラー内容2(パターン2)

DevTools listening on ws://127.0.0.1:57041/devtools/browser/43a85349-40e9-4527-8ddc-7700f427adb8 Traceback (most recent call last): File "C:\Users\motoc\OneDrive\デスクトップ\radio2.py", line 14, in <module> driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]').click() File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath return self.find_element(by=By.XPATH, value=xpath) File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element return self.execute(Command.FIND_ELEMENT, { File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]"} (Session info: chrome=79.0.3945.117) [6736:15044:0110/153810.848:ERROR:native_message_process_host.cc(344)] Error when writing to Native Messaging host: -101

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

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

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

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

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

guest

回答2

0

ベストアンサー

「ソースファイルを表示」では、最初のHTMLの状態(サーバから送られてきたもの)しか見えません。あとからJavaScriptで変化したものは反映されません。

投稿2020/01/09 11:10

編集2020/01/09 11:26
maisumakun

総合スコア145184

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

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

kimukimu009

2020/01/09 11:12

ありがとうございます。 最初のHTMLとはどういうことでしょうか?
maisumakun

2020/01/09 11:26

すみません、投稿が途切れてしまっていました。
kimukimu009

2020/01/09 11:35

ありがとうございます。 クリックする前(JavaScriptによって、クリックしたら入力フォーム等が表示されると考えられる)=最初のHTMLだと考えて よろしいでしょうか? だとして、 最初のHTMLの中にある文字すら、ソースファイルの中に見当たらない ことも、あり得るのでしょうか?
maisumakun

2020/01/09 11:36

> 最初のHTMLの中にある文字すら、ソースファイルの中に見当たらないことも、あり得るのでしょうか? はい、「SPA」と呼ばれるように、ほぼ完全にJavaScriptで構築してしまって、HTMLには最低限のタグしかない、というような実装もありえます。
kimukimu009

2020/01/09 13:16

なるほどです。 ありがとうございます。
guest

0

Seleniumの操作は今現在表示されている要素に対して行うものなので、
「”ソースを表示”で出ないから操作できない」とはなりません。
私自身も画面構築をほぼJavaScriptで行われて動的に画面が変化するアプリケーションに対して
自動テストのためにSeleniumで組んだことがありますが、正しくXPATHを辿れていればきちんと操作できました。
おそらくXPATHが間違っているか、要素が画面上に現れていない状態で操作しようとしている可能性はあります。

投稿2020/01/09 12:27

m.ts10806

総合スコア80850

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

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

kimukimu009

2020/01/09 13:26

なるほどです。 ■XPATHが間違っているか →いろいろ試したのは試しました。 つまり、Googleデベロッパーツールから、xpathコピー、つまり、ラジオボタンの周辺のいくつかのxpathパターンをコピーしました。 ■要素が画面上に現れていない状態で 操作しようとしている →これの対策としては、どういった可能性が考えられますか? こちらでは、待機時間の設定しましたが、構文間違えている可能性あります。 つまり、 ラジオボタンクリックの前に、 driver.implicitly_wait(10) を設定しましたが、うまくいかなかったです。
m.ts10806

2020/01/09 13:38

あとは実際のサイトと実際のコードがないとなんとも言えません。
kimukimu009

2020/01/10 06:53

ご回答ありがとうございます。 HTMLファイルが、かなり複雑なので、抜粋して記載いたします。 ■HTMLファイルの中身(かなり複雑なので、抜粋して記載) 具体的なソースファイル(ソースファイルを表示させた) ----------------------------------------------------- <!doctype html> <!--[if IE 8]><html data-19ax5a9jf="dingo" lang="ja-JP" class="a-no-js a-lt-ie10 a-lt-ie9 a-ie8"><![endif]--><!--[if IE 9]><html data-19ax5a9jf="dingo" lang="ja-JP" class="a-no-js a-lt-ie10 a-ie9"><![endif]--><!--[if !(IE 8)&!(IE 9)]><!--><html data-19ax5a9jf="dingo" lang="ja-JP" class="a-no-js"><!--<![endif]--><head><script>var aPageStart = (new Date()).getTime();</script><meta charset="utf-8"/> <script type='text/javascript'>var ue_t0=ue_t0||+new Date();</script> <div id="athena-widget-container"></div> 、 、 <div id="sc-masthead" class="clearable"> 、 、 <!-- →→■■ここ!!■■「※ラジオボタンがあるコンテンツを読み込んでいると思われるjavascript --> <script type="text/javascript">if(typeof uet == "function"){uet('ne');}</script></div><div id="sc-content-container"> <div id="ayb-app"></div> </div><div id="sc-footer-container"> 、 、 ---------------------------------------------------- ■pythonファイル ----------------------------------------------------- # seleniumを使う準備 from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() PROFILE_PATH = r'C:\Users\motoc\AppData\Local\Google\Chrome\User Data' options.add_argument('--user-data-dir=' + PROFILE_PATH) driver = webdriver.Chrome(options=options) #その他の試し1 driver.get("https://sellercentral-japan.amazon.com/messaging/contact?orderID=250-4522981-2115804&marketplaceID=A1VC38T7YXB528") driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]').click() ----------------------------------------------------- ●●エラーのパターン1●● ■HTMLソース(デベロッパーツールで、検証→該当場所を探り、copy→xpathのフルパスコピー) <span class="kat-radiobutton-icon" role="radio" aria-details="31w2kk6hn8" aria-label="大型または重量商品の配送を調整する" tabindex="0" aria-checked="true"></span> ■XPATH /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[1]/span ■エラー内容 DevTools listening on ws://127.0.0.1:56966/devtools/browser/85a7fa7d-467a-4f88-8fb3-c052f70a6a6a Traceback (most recent call last): File "C:\Users\motoc\OneDrive\デスクトップ\radio2.py", line 14, in <module> driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[1]/span').click() File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath return self.find_element(by=By.XPATH, value=xpath) File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element return self.execute(Command.FIND_ELEMENT, { File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[1]/span"} (Session info: chrome=79.0.3945.117) [10396:12376:0110/153344.524:ERROR:native_message_process_host.cc(344)] Error when writing to Native Messaging host: -101 ●●エラーのパターン2●● ■HTMLソース(デベロッパーツールで、検証→該当場所を探り、copy→xpathのフルパスコピー) <kat-label class="text" for="b41lx6rqbq" text="大型または重量商品の配送を調整する"><label for="b41lx6rqbq"><span class="emphasis kat-label-hide"></span><span class="text">大型または重量商品の配送を調整する</span></label></kat-label> ■XPATH /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1] ■エラー内容 DevTools listening on ws://127.0.0.1:57041/devtools/browser/43a85349-40e9-4527-8ddc-7700f427adb8 Traceback (most recent call last): File "C:\Users\motoc\OneDrive\デスクトップ\radio2.py", line 14, in <module> driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]').click() File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath return self.find_element(by=By.XPATH, value=xpath) File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element return self.execute(Command.FIND_ELEMENT, { File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\motoc\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]"} (Session info: chrome=79.0.3945.117) [6736:15044:0110/153810.848:ERROR:native_message_process_host.cc(344)] Error when writing to Native Messaging host: -101 ■可能性のあるxpath /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[1]/span /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]/label /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[1]/input /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1] /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2] /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]/label /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[1]/span /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]/label/span[1] /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[1]/label/span[2] /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[2] /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[2]/label /html/body/div[1]/div[2]/div/div/div/div[2]/kat-box/div/kat-radiobutton[2]/div[2]/kat-label[2]/label/span[1]
m.ts10806

2020/01/10 07:13

コメントで追記されてもマークダウン使えませんし他の回答者の目につきにくいので原則質問本文に追記してください
kimukimu009

2020/01/10 10:45

かしこまりました。 少々お待ちください。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問