77730


こちらのQiita記事を参考にSeleniumの勉強をしています。  
Ubuntu、Python3、Chromeを使っています。  
以下のサンプルコードについて質門です。

[code]

    import time
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get('https://www.google.com/')
    time.sleep(5)
    search_box = driver.find_element_by_name("q")
    search_box.send_keys('ChromeDriver')
    search_box.submit()
    time.sleep(5)
    driver.quit()
    
[/code]

上のコードは正常に動作し、Googleで検索が行われた画面をスクリーンショットしました。

この、

[code]

    search_box = driver.find_element_by_name("q")
    
[/code]

という部分は、Googleの検索ボックスを`<input
name="q">`という手がかりで特定していると思いますが、この"q"というnameの探し方が分かりません。

www.google.comにおいて検索ボックスを右クリックしてInspectを選択すると、以下の図のように要素が選択されます。

[![Googleの検索ボックスをインスペクトした][1]][1]  
[1]: https://i.stack.imgur.com/vzZOv.png

[code]

    <input id="input" type="search" autocomplete="off" spellcheck="false" role="combobox" placeholder="Search Google or type a URL" aria-live="polite">
    
[/code]

ここにはnameアトリビュートがありません。  
この前後の表示をnameや"q"で検索したのですが、この要素に該当するものはなかったと思います。

また、`id="input"`で引っかけようと思って

[code]

    #search_box = driver.find_element_by_name("q")
    search_box = driver.find_element_by_id("input")
    
[/code]

とコードを書き換えてみると

[code]

    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="input"]"}
    
[/code]

とエラーが出て止まってしまいました。

ということで、このGoogleの検索ボックスを特定する"q"というnameの割り出し方について、ご教示くださるようお願いいたします。


CC BY-SA 4.0
2021-06-23T03:21:45.687
77726
2021-06-23T06:06:24.803
26673
question
python html selenium selenium-webdriver
Seleniumの要素を特定しているnameの取得方法が分からない？


コメントをいただきました。

  * Chromeの場合、lazy loadingが働いているのではないか。chrome://new-tab-page/lazy_load.js を見ますと、URLSearchParams;searchParams.append("q",this.finalResult_);と書かれている
  * FirefoxでInspectすると<input class="gLFyf gsfi" ... name="q" ... title="検索" ...> と表示される

確かにFirefoxでInspectされるとname="q"が確認できたので、私としてはこれで問題解決とします。ありがとうございました。


CC BY-SA 4.0
2021-06-23T06:06:24.803
77730
2021-06-23T06:06:24.803
26673
77726
answer