37847


WordPressの管理画面を Python Selenium で自動操作を試みているところですが、  
見事にハマってしまいました。ご教示のほどよろしくお願いします。

■ 自動操作のプロセス

① WordPress 管理画面にログイン（OK）

② プラグインの操作画面に移動（OK）

[![画像](https://i.stack.imgur.com/1LJWr.jpg)](https://i.stack.imgur.com/1LJWr.jpg)

③ CSVファイルのアップロード（OK）

④ アップロード後に表示されるドロップダウンメニューの選択（現在ここで躓いています）

[![画像][3]][3]

手動であれば、下図のようにメニューの選択ができます。

[![画像](https://i.stack.imgur.com/Hqfnx.jpg)](https://i.stack.imgur.com/Hqfnx.jpg)

コードは、下記のように書きました。

[code]

    # coding: utf-8   
    from selenium.webdriver.support.select import Select
    from selenium import webdriver
    import pyautogui
    from time import sleep
    
    # ブラウザは、Chrome を使用
    browser = webdriver.Chrome()
    
    # プラグインの画面に移動
    browser.get(wai1url)
    sleep(5)
    
    # csvファイルをアップロード
    browser.find_element_by_link_text(u"ファイルをアップロードする").click()
    sleep(2)
    pyautogui.typewrite('link_20')
    sleep(3)
    pyautogui.press('down')
    sleep(1)
    pyautogui.press('return')
    sleep(2)
    
    #
    # csvファイルのアップロード後、ドロップダウンが表示されます。AJAX？
    #
    
    # ページをスクロール
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    
    # 下記コードは機能しました。
    browser.find_element_by_link_text(u"既存の項目").click()
    sleep(3)
    browser.find_element_by_link_text(u"新規の項目").click()
    sleep(3)
    
    # ドロップダウンメニューの選択（機能しません）
    select = Select(browser.find_element_by_name('custom_type_selector'))
    
    for index in range(len(select.options)):
        select = Select(browser.find_element_by_name('custom_type_selector'))
        select.select_by_index(4) # select Users 
    
[/code]

ドロップダウンのHTMLは、下記の通りです。

[code]

    <select name="custom_type_selector" id="custom_type_selector" class="wpallimport-post-types">
    
    <option value="post" data-imagesrc="dashicon dashicon-post" selected="selected">投稿</option>
    
    <option value="page" data-imagesrc="dashicon dashicon-page" >固定ページ</option>
    
    <option value="taxonomies" data-imagesrc="dashicon dashicon-taxonomies" >Taxonomies</option>
    
    <option value="import_users" data-imagesrc="dashicon dashicon-import_users" >Users</option>
    
    </select>
    
[/code]

他にもいくつか試してみました。

[ 1 ]

[code]

    s1 = Select(browser.find_element_by_id('custom_type_selector'))
    s1.select_by_index(4)
    
[/code]

結果：selenium.common.exceptions.UnexpectedTagNameException: Message: Select only
works on ＜select＞ elements, not on ＜div＞

[ 2 ]

[code]

    s1 = browser.find_element_by_xpath("//div[@class='wpallimport-choose-import-direction']/select/option[@value='post']")
    
    s1.click()
    
[/code]

結果： Message: no such element: Unable to locate element･･･

[ 3 ]

[code]

    s1 = browser.find_element_by_id('custom_type_selector')
    for option in s1.find_elements_by_tag_name('option'):
        if option.text == 'Users':
            option.click()
            sleep(60)
            break
    
[/code]

このように色々トライしてみましたが、同じようなエラーばかりです。

ただ普通のHTMLページだと、

[code]

    driver.get("http://the-internet.herokuapp.com/dropdown")
    s1 = Select(driver.find_element_by_id('dropdown'))
    s1.select_by_index(4)
    
[/code]

このようにすれば、ドロップダウンメニューを選択できるのですが・・・。

ぜひ、お助けください


CC BY-SA 3.0
2017-09-10T07:32:12.057
37846
2019-06-04T04:39:38.743
25312
question
python wordpress selenium
Python Selenium でドロップダウンが選択できません


ドロップダウンメニューのHTMLコードを誤解されています。  
HTMLソースではなく、開発者ツールなどで確認できるDOMツリーを見ましょう。

HTMLソースでは `<select>` 要素ですが、  
画面の表示時に `<div>` 要素に置き換えられています。  
ですから、単純に `<div>` をクリックするコードを書けば良いです。  
これは [ 1 ] で表示されているエラーもヒントになります。


CC BY-SA 3.0
2017-09-10T08:14:42.667
37847
2017-09-10T08:14:42.667
13695
37846
answer