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

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

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

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

Q&A

解決済

1回答

1469閲覧

pythonでのスクレイピングでcheckboxを選択できない。

yusuke1818

総合スコア9

Python

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

0グッド

0クリップ

投稿2020/11/15 05:54

編集2020/11/16 03:16

PDBというサイトからあるタンパク質を検索して一括ダウンロードをしたいのですが、
def btn_click():の中の
search_check = browser.find_element_by_name("entry PDB")
search_check.click()
の所でcheckboxをうまく押せません。教えてください。
下記サイトのデータファイル形式:のPDBというcheckboxを選択したいです。

https://www.rcsb.org/downloads?ids=3W8R,3ASY,3ASZ,3W34

#コード

import tkinter from selenium import webdriver from time import sleep import requests from bs4 import BeautifulSoup root=tkinter.Tk() root.title(u"タンパク質検索") root.geometry("500x500") Static1 = tkinter.Label(text=u'タンパク質') Static1.pack() EditBox = tkinter.Entry(width=50) EditBox.insert(tkinter.END,"") EditBox.place(x=170,y=100) EditBox.pack() def btn_click(): EditBox_value = EditBox.get() browser = webdriver.Chrome('chromedriver.exe') browser.get("https://www.rcsb.org/") search_id = browser.find_element_by_id("search-bar-input-text") search_id.send_keys(EditBox_value) sleep(1) #-------------------------------------------------- search_id1 = browser.find_element_by_id("menu1") search_id1.click() sleep(1) search1 =browser.find_element_by_xpath("/html/body/div[2]/div/div/div[3]/div[2]/div[2]/table/tr/td[2]/div/div[1]/div[2]/div[1]") search1.click() #--------------------------------------------------- sleep(2) search_check = browser.find_element_by_name("entry PDB") search_check.click() search_final = browser.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div/div[1]/form/div[3]/div[1]/button") search_final.click() search_final2 = browser.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div/div[2]/div/div/div[2]/table/tr[2]/td/div[1]/a/h4/font[1]/font") search_final2.click() browser.back() browser.close() btn = tkinter.Button(root, text='タンパク質を検索する', command=btn_click) btn.place(x=170, y=200) root.mainloop()

#エラーメッセージ

Exception in Tkinter callback Traceback (most recent call last): File "C:\ANACONDA\lib\tkinter\__init__.py", line 1705, in __call__ return self.func(*args) File "<ipython-input-2-a563075303f8>", line 37, in btn_click search_check = browser.find_element_by_name("entry PDB") File "C:\ANACONDA\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 496, in find_element_by_name return self.find_element(by=By.NAME, value=name) File "C:\ANACONDA\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element 'value': value})['value'] File "C:\ANACONDA\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\ANACONDA\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":"css selector","selector":"[name="entry PDB"]"} (Session info: chrome=86.0.4240.198)

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

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

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

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

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

nto

2020/11/15 09:08

entryへの入力値は何でしょうか。 何を入力するとチェックボックスが現れるのでしょうか?
nto

2020/11/15 09:13

ちなみにクリックに関するコード部分には特には問題はない様で selenium上で[https://www.rcsb.org/downloads?ids=3W8R,3ASY,3ASZ,3W34]が開かれている状態ならば search_check = browser.find_element_by_name("entry PDB") search_check.click() 掲題のこちらのコードで正常にチェックボックスにチェックが入ります。 恐らくはその他の部分に問題があるのではないでしょうか。
yusuke1818

2020/11/16 03:14

Entryへはタンパク質名を入力します。 search_check = browser.find_element_by_name("entry PDB") search_check.click() ここからうまくいかなくなるのでこの付近だとは思っています。 エラーメッセージを追加します。出来たらお願いします。
yusuke1818

2020/11/16 03:17

entryには具体的には uridine kinase を入力します。
nto

2020/11/16 03:40

そもそも[uridine kinase]を検索して出てきたページ上にはentry PDBはおろか、33行目以降のセレクタは存在していない様です。
yusuke1818

2020/11/16 04:04

[uridine kinase]を検索し, search1 =browser.find_element_by_xpath("/html/body/div[2]/div/div/div[3]/div[2]/div[2]/table/tr/td[2]/div/div[1]/div[2]/div[1]") search1.click() を押した後にentry PDBは出てきています。
nto

2020/11/16 04:35

>>> https://www.rcsb.org/downloads?ids=3W8R,3ASY,3ASZ,3W34 >>> 実際にこのページのデータファイル形式のPDBというcheckboxを押したいです。 そちらのページのチェックボックスを押下したいのはわかりますが、どうがんばっても現状のコードでentryに[uridine kinase]を入力してseleniumを発火させても上記URLのページには遷移される事はなくソースにも記載の要素は存在しておりません。 そちらのページのチェックボックスを押下したいのであれば、browser変数上でそのページが開かれている必要があります。(初めにもコメントした通り、チェックボックスの押下コード自体は間違っていない様子です)
guest

回答1

0

ベストアンサー

Python

1import tkinter 2from selenium import webdriver 3from time import sleep 4import requests 5from bs4 import BeautifulSoup 6 7root=tkinter.Tk() 8root.title(u"タンパク質検索") 9root.geometry("500x500") 10 11Static1 = tkinter.Label(text=u'タンパク質') 12Static1.pack() 13 14EditBox = tkinter.Entry(width=50) 15EditBox.insert(tkinter.END,"") 16EditBox.place(x=170,y=100) 17EditBox.pack() 18 19 20 21def btn_click(): 22 EditBox_value = EditBox.get() 23 browser = webdriver.Chrome('chromedriver.exe') 24 browser.get("https://www.rcsb.org/") 25 search_id = browser.find_element_by_id("search-bar-input-text") 26 search_id.send_keys(EditBox_value) 27 sleep(2) 28 #-------------------------------------------------- 29 search_id1 = browser.find_element_by_id("menu1") 30 search_id1.click() 31 sleep(5) 32 #--------------------------------------------------- 33 search_check = browser.find_element_by_xpath("//div[text()='Download Selected Files']") 34 search_check.click() 35 sleep(3) 36 browser.switch_to.window(browser.window_handles[1]) 37 search_final = browser.find_element_by_id("coordinatesOptions") 38 search_final.click() 39 #search_final2 = browser.find_element_by_xpath("//button[text()='Generate File Batches for Download']") 40 #search_final2.click() 41 sleep(8) 42 43 browser.close() 44 browser.switch_to.window(browser.window_handles[0]) 45 browser.close() 46 47btn = tkinter.Button(root, text='タンパク質を検索する', command=btn_click) 48btn.place(x=170, y=200) 49 50root.mainloop() 51

投稿2020/11/17 12:06

Reach

総合スコア733

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

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

yusuke1818

2020/11/19 04:14

なるほどですね!出来ました! 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問