54192


[このページ](https://tenshoku.mynavi.jp/search/)の勤務地ボタンを押すとモーダルが表示されます。  
モーダルの左メニューの地方をクリックするところまでは行けるのですが、例えば関西をクリック→大阪をクリックとしたい場合、大阪のチェックボックス(input要素)がnot
visibleのためクリックできません。

当初はXpathでinput要素を取得していましたが、コードの方針を少し変えて、すべてのインプット要素をまず取得し、カスタム属性の値で特定のチェックボックスを見つけるようにしました。  
チェックボックスは都道府県ごとにカスタム属性`value`の値がことなるのでそのようにしました。  
例：  
北海道地方を選択している状態では、北海道のチェックボックスのvalue属性の値は`P01`になっています。大阪府は`P27`です。

ですが、関西ボタンをクリックしたあとでも、value属性の値が`P27`になっている要素は見つからず、`P01`、つまり関西ボタンをクリックする前の北海道の状態のまま変わっていないということになります。

しかし、自動操作中のブラウザ画面ではちゃんと関西の画面に遷移しています。

[code]

        def condition_specification(self, start_url):
            """ 条件を指定したページを表示させる """
    
            self.browser.get(start_url)
    
            self.browser.find_element_by_xpath("/html/body/div[1]/div[3]/div/form/div/section[1]/div/table/tbody/tr[2]/td/div[2]/div[1]/a").click()
    
    
            # 地方ボタンをクリック (self.areaは地方ボタンの属性のバリューが入っている)
            area_buttons = self.browser.find_elements_by_class_name("modalChoice__item")
            for area_button in area_buttons:
                attr = area_button.get_attribute("data-large-cd")
                if attr == self.area:
                    area_button.click()
    
    
            # 大阪府のチェックボックスをクリックする処理
            checkboxes = self.browser.find_elements_by_name("srPrefectureCdList")
            for checkbox in checkboxes:
                attr = checkbox.get_attribute("value")
                if attr == "P27": # P27は大阪府のチェックボックス要素
                    # 大阪府のチェックボックスがクリックできるようになるまで待つ
                    self.wait.until(EC.element_to_be_clickable(checkbox))
                    # クリック
                    checkbox.click()
    
            # サブミット
            # self.browser.find_element_by_xpath("/html/body/div[1]/div[9]/section/div[3]/div[2]/button").click()
    
[/code]

大阪府のチェックボックスが見つからないということになりクリックされません。

javascriptでクリックする方法やActionChainで座標を指定してクリックする方法も試しましたがチェックボックスはチェックできませんでした。

TABボタンで要素を選択していき、SPACEキーでチェックする方法も試しましたが、SPACEキーを押すと画面のスクロールになってしまいチェックできませんでした。

なにか方法は無いものでしょうか・・・  
よろしくお願いいたします。


CC BY-SA 4.0
2019-04-14T10:47:48.663
54158
2020-04-06T06:29:07.997
2020-04-06T06:29:07.997
3060
32911
question
python google-chrome web-scraping selenium
PythonのSeleniumで表示されているのにnot visibleな要素がクリックできない


対象サイトを確認してみましたが都道府県の checkbox の input 要素はクリック可能にはならないようです。チェックのUI部品自体は
checkbox_icon クラスが設定されている span 要素となっています。

対象の input 要素を検索した後にその親要素( label )を取り出してそちらをクリックしてみたらどうでしょうか？

[code]

        # 大阪府のチェックボックスをクリックする処理
        checkboxes = self.browser.find_elements_by_name("srPrefectureCdList")
        for checkbox in checkboxes:
            attr = checkbox.get_attribute("value")
            if attr == "P27": # P27は大阪府のチェックボックス要素
                # クリック
                label = checkbox.find_element_by_xpath('..')
                label.click()
    
[/code]


CC BY-SA 4.0
2019-04-15T15:12:11.917
54192
2019-04-15T15:12:11.917
27410
54158
answer