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

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

ただいまの
回答率

88.22%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 406

kimukimu009

score 32

以下の、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
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/09 20:35

    ありがとうございます。

    クリックする前(JavaScriptによって、クリックしたら入力フォーム等が表示されると考えられる)=最初のHTMLだと考えて
    よろしいでしょうか?

    だとして、

    最初のHTMLの中にある文字すら、ソースファイルの中に見当たらない

    ことも、あり得るのでしょうか?

    キャンセル

  • 2020/01/09 20:36

    > 最初のHTMLの中にある文字すら、ソースファイルの中に見当たらないことも、あり得るのでしょうか?

    はい、「SPA」と呼ばれるように、ほぼ完全にJavaScriptで構築してしまって、HTMLには最低限のタグしかない、というような実装もありえます。

    キャンセル

  • 2020/01/09 22:16

    なるほどです。

    ありがとうございます。

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/10 15: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]

    キャンセル

  • 2020/01/10 16:13

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

    キャンセル

  • 2020/01/10 19:45

    かしこまりました。

    少々お待ちください。

    よろしくお願いいたします。

    キャンセル

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

  • ただいまの回答率 88.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る