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

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

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

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

3回答

2290閲覧

Python Seleniumでエラーが出る

Kota.Y

総合スコア25

YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2020/06/16 06:37

YouTubeのコメントを一括削除するコードを書いているのですが、ループの部分で

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

というエラーが出ました。押下する要素をボタンの親にするなど対策してみたものの効果がありません。解決策が分かる方は教えていただきたいです。

ソースコード

python

1from selenium.webdriver.support.ui import WebDriverWait 2from selenium.webdriver.support import expected_conditions as EC 3from selenium.webdriver.common.by import By 4from selenium import webdriver 5import chromedriver_binary 6import time 7from selenium.common.exceptions import NoSuchElementException 8 9wait_time = 30 10 11# 画面遷移関数 12url = "https://www.youtube.com/feed/history/comment_history" 13 14 15def page_move(url): 16 WebDriverWait(driver, wait_time).until( 17 EC.presence_of_element_located((By.XPATH, url)) 18 ) 19 20 21def insert_pw(xpath, str): 22 driver.find_element_by_xpath(xpath).send_keys(str) 23 24 25def click(xpath): 26 driver.find_element_by_xpath(xpath).click() 27 28 29# YouTubeコメントページに移動 30driver = webdriver.Chrome() 31driver.implicitly_wait(1) 32driver.get(url) 33 34# YouTubeログインページに移動 35login_button = '/html/body/ytd-app/div/div/ytd-masthead/div[3]/div[3]/div[2]/ytd-button-renderer/a/paper-button' 36click(login_button) 37 38time.sleep(1) 39 40# Googleログイン 41# ID入力 42login_id = "hogehogehogehoge@gmail.com" 43login_id_xpath = '/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[1]/div/form/span/section/div/div/div[1]/div/div[1]/div/div[1]/input' 44login_id_button = '/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[2]/div/div[1]/div/div' 45insert_pw(login_id_xpath, login_id) 46click(login_id_button) 47 48time.sleep(1) 49 50# パスワード入力 51login_pw = "hoge1234" 52login_pw_xpath = '/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[1]/div/form/span/section/div/div/div[1]/div[1]/div/div/div/div/div[1]/div/div[1]/input' 53login_pw_button = '/html/body/div[1]/div[1]/div[2]/div/div[2]/div/div/div[2]/div/div[2]/div/div[1]/div/div' 54insert_pw(login_pw_xpath, login_pw) 55time.sleep(1) 56click(login_pw_button) 57 58time.sleep(3) 59 60comment_div = '/html/body/ytd-app/div/ytd-page-manager/ytd-browse/ytd-two-column-browse-results-renderer/div[1]/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]' 61num_of_comments = driver.find_element_by_xpath(comment_div) 62print(num_of_comments) 63 64for num in range(100): 65 menu_bar = '/html/body/ytd-app/div/ytd-page-manager/ytd-browse/ytd-two-column-browse-results-renderer/div[1]/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]/ytd-comment-history-entry-renderer[1]/div[2]/ytd-menu-renderer' 66 time.sleep(1) 67 click(menu_bar) 68 time.sleep(1) 69 delete_button = '/html/body/ytd-app/ytd-popup-container/iron-dropdown/div/ytd-menu-popup-renderer/paper-listbox/ytd-menu-navigation-item-renderer[2]' 70 delete_button_alt = '/html/body/ytd-app/ytd-popup-container/iron-dropdown/div/ytd-menu-popup-renderer/paper-listbox/ytd-menu-navigation-item-renderer' 71 try: 72 driver.find_element_by_xpath(delete_button) 73 except NoSuchElementException: 74 delete_button = delete_button_alt 75 click(delete_button) 76 delete_confirm = '/html/body/ytd-app/ytd-popup-container/paper-dialog/yt-confirm-dialog-renderer/div[2]/div/yt-button-renderer[2]/a/paper-button' 77 delete_button_alt = '/html/body/ytd-app/ytd-popup-container/paper-dialog/yt-confirm-dialog-renderer/div[2]/div/yt-button-renderer[2]/a/paper-button' 78 click(delete_confirm) 79 time.sleep(1) 80 81driver.close() 82driver.quit() 83

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

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

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

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

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

guest

回答3

0

XPathは絶対XPathのほうがいいと思います。
xpathの書き方なら、下記の記事をご参照ください。
お役に立てれば幸いです。
XPathとは?基本概念や書き方をわかりやすく解説!

またYouTubeのコメントをスクレイピングしたいなら、Octoparseはそのようなテンプレートを提供しています。
https://service.octoparse.com/ja-jp/web-scraping-template

投稿2020/06/23 09:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

短絡的かつ強引な手段ですが以下に変更してみるのはどうでしょう。

python

1def click(xpath): 2 driver.execute_script('document.evaluate(' + xpath + ', document, null, 7, null).snapshotItem(0).click();')

投稿2020/06/16 18:08

編集2020/06/16 18:09
shirai

総合スコア1290

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

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

0

どのクリックでのエラーかわかりませんが、その箇所でdriver.find_element_by_xpath(xpath)で得られた要素が本当に目的のノードかを確認するのでしょうか。

XPathが「何番目のdiv」とかの指定なので、非常に危うい感じです。

投稿2020/06/16 10:59

otn

総合スコア85901

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問