Python3で、tkinterを使用して、下記のコードを作成しました。
python3.x
1 2from tkinter import * 3from tkinter import ttk 4 5root = Tk() 6root.title('測定CH設定') 7root.geometry("500x860+640+40") 8 9Lframe1 = ttk.Labelframe(root, text='測定帯域選択', padding=5) 10Lframe1.grid(row=0, column=0, columnspan=1, padx=15, pady=10, sticky='w') 11Lframe2 = ttk.Labelframe(root, text='2.4GHz',padding=5) 12Lframe2.grid(row=1,column=0, columnspan=1, padx=15, pady=10, sticky='nw') 13Lframe3 = ttk.Labelframe(root, text='5GHz',padding=5) 14Lframe3.grid(row=1,column=1, columnspan=1, padx=10, pady=10, sticky='w') 15 16selected_frame = IntVar() 17 18def change_selected_frame(): 19 if selected_frame.get() == 0: 20 for child in Lframe2.winfo_children(): 21 child.configure(state='enable') 22 for child in Lframe3.winfo_children(): 23 child.configure(state='disable') 24 25 elif selected_frame.get() == 1: 26 for child in Lframe2.winfo_children(): 27 child.configure(state='disable') 28 for child in Lframe3.winfo_children(): 29 child.configure(state='enable') 30 31 else: 32 for child in Lframe2.winfo_children(): 33 child.configure(state='disable') 34 for child in Lframe3.winfo_children(): 35 child.configure(state='disable') 36 37Rbutton1 = ttk.Radiobutton(Lframe1, text='2.4GHz ', variable=selected_frame, value=0, command=change_selected_frame) 38Rbutton1.grid(row=1,column=0,pady=5) 39 40Rbutton2 = ttk.Radiobutton(Lframe1,text='5GHz', variable=selected_frame, value=1, command=change_selected_frame) 41Rbutton2.grid(row=1,column=1,pady=5) 42 43class val_2G: 44 def __init__(self,name,set_frame,row_no): 45 self.bool=BooleanVar() 46 self.bool.set(False) 47 self.name=name 48 self.Cbtn=ttk.Checkbutton(set_frame, text=self.name, variable=self.bool) 49 self.Cbtn.grid(row=row_no,column=0, columnspan=1, padx=15, pady=5, sticky='w') 50 51class val_5G: 52 def __init__(self,name,set_frame,row_no): 53 self.bool=BooleanVar() 54 self.bool.set(False) 55 self.name=name 56 self.Cbtn=ttk.Checkbutton(set_frame, text=self.name, variable=self.bool) 57 self.Cbtn.grid(row=row_no,column=0, columnspan=1, padx=15, pady=5, sticky='w') 58 59val_2G1=val_2G('CH1',Lframe2,6) 60val_2G2=val_2G('CH2',Lframe2,7) 61val_2G3=val_2G('CH3',Lframe2,8) 62val_2G4=val_2G('CH4',Lframe2,9) 63val_2G5=val_2G('CH5',Lframe2,10) 64val_2G6=val_2G('CH6',Lframe2,11) 65val_2G7=val_2G('CH7',Lframe2,12) 66val_2G8=val_2G('CH8',Lframe2,13) 67val_2G9=val_2G('CH9',Lframe2,14) 68val_2G10=val_2G('CH10',Lframe2,15) 69val_2G11=val_2G('CH11',Lframe2,16) 70val_2G12=val_2G('CH12',Lframe2,17) 71val_2G13=val_2G('CH13',Lframe2,18) 72val_2G_list=[val_2G1, val_2G2, val_2G3, val_2G4, val_2G5, val_2G6, val_2G7, val_2G8, val_2G9, val_2G10, val_2G11, val_2G12, val_2G13] 73 74val_5G36=val_5G('CH36',Lframe3,6) 75val_5G40=val_5G('CH40',Lframe3,7) 76val_5G44=val_5G('CH44',Lframe3,8) 77val_5G48=val_5G('CH48',Lframe3,9) 78val_5G52=val_5G('CH52',Lframe3,10) 79val_5G56=val_5G('CH56',Lframe3,11) 80val_5G60=val_5G('CH60',Lframe3,12) 81val_5G64=val_5G('CH64',Lframe3,13) 82val_5G100=val_5G('CH100',Lframe3,14) 83val_5G104=val_5G('CH104',Lframe3,15) 84val_5G108=val_5G('CH108',Lframe3,16) 85val_5G112=val_5G('CH112',Lframe3,17) 86val_5G116=val_5G('CH116',Lframe3,18) 87val_5G120=val_5G('CH120',Lframe3,19) 88val_5G124=val_5G('CH124',Lframe3,20) 89val_5G128=val_5G('CH128',Lframe3,21) 90val_5G132=val_5G('CH132',Lframe3,22) 91val_5G136=val_5G('CH136',Lframe3,23) 92val_5G140=val_5G('CH140',Lframe3,24) 93val_5G_list=[val_5G36, val_5G40, val_5G44, val_5G48, val_5G52, val_5G56, val_5G60, val_5G64, val_5G100, val_5G104, val_5G108, val_5G112, val_5G116, val_5G120, val_5G124, val_5G128, val_5G132, val_5G136, val_5G140] 94 95def check_all_2G_checkboxes(): 96 for val in val_2G_list: 97 val.bool.set(True) 98 99def clear_all_2G_checkboxes(): 100 for val in val_2G_list: 101 val.bool.set(False) 102 103def check_all_5G_checkboxes(): 104 for val in val_5G_list: 105 val.bool.set(True) 106 107def clear_all_5G_checkboxes(): 108 for val in val_5G_list: 109 val.bool.set(False) 110 111 112def check_box(): 113 selected_channels2 = [] 114 selected_channels5 = [] 115 116 if selected_frame.get() == 0: 117 for val in val_2G_list: 118 if val.bool.get(): 119 selected_channels2.append(val.name) 120 121 elif selected_frame.get() == 1: 122 for val in val_5G_list: 123 if val.bool.get(): 124 selected_channels5.append(val.name) 125 126 if len(selected_channels2) > 0: 127 measure_channels2(selected_channels2) 128 129 elif len(selected_channels5) > 0: 130 measure_channels5(selected_channels5) 131 132def measure_channels2(channels2): 133 for channel2 in channels2: 134 if not channel2.startswith('CH'): 135 continue 136 ch2 = channel2[2:] 137 print(f'チャンネル {ch2} を測定中') 138 139 from selenium import webdriver 140 driver = webdriver.Firefox() 141 driver.get('http://router.asus.com') 142 driver.find_element_by_id('login_username').send_keys('admin') 143 driver.find_element_by_name('login_passwd').send_keys('password') 144 driver.find_element_by_class_name('button').click() 145 driver.maximize_window() 146 driver.get('http://router.asus.com/Advanced_Wireless_Content.asp') 147 from selenium.webdriver.support.ui import Select 148 f2g = driver.find_elements_by_name('wl_unit') 149 Select(f2g[2]).select_by_value("0") #画像1 150 f2g = driver.find_element_by_name('wl_channel') 151 f2g_ch = Select(f2g) 152 f2g_ch.select_by_value(ch2) 153 driver.find_element_by_id('applyButton').click() 154 from selenium.webdriver.common.alert import Alert 155 Alert(driver).accept() 156 157 print("測定終了") 158 159 160def measure_channels5(channels5): 161 for channel5 in channels5: 162 if not channel5.startswith('CH'): 163 continue 164 ch5 = channel5[2:] 165 print(f'チャンネル {ch5} を測定中') 166 ch5 = channel5+'/80' #画像2の要素の通りにリスト内の名前を合わせたいが、エラーがでてしまう 167 168 from selenium import webdriver 169 driver = webdriver.Firefox() 170 driver.get('http://router.asus.com') 171 driver.find_element_by_id('login_username').send_keys('admin') 172 driver.find_element_by_name('login_passwd').send_keys('password') 173 driver.find_element_by_class_name('button').click() 174 driver.maximize_window() 175 driver.get('http://router.asus.com/Advanced_Wireless_Content.asp') 176 from selenium.webdriver.support.ui import Select 177 f2g = driver.find_elements_by_name('wl_unit') 178 Select(f2g[2]).select_by_value("1") #画像2 179 f2g = driver.find_element_by_name('wl_channel') 180 f2g_ch = Select(f2g) 181 f2g_ch.select_by_value(ch5) 182 driver.find_element_by_id('applyButton').click() 183 from selenium.webdriver.common.alert import Alert 184 Alert(driver).accept() 185 186 print("測定終了") 187 188 189 190btn1 = ttk.Button(Lframe2, text='全選択', padding=5, command=check_all_2G_checkboxes) 191btn1.grid(row=5,column=0,pady=5) 192 193btn2 = ttk.Button(Lframe2, text='全解除', padding=5, command=clear_all_2G_checkboxes) 194btn2.grid(row=5,column=1,pady=5) 195 196btn3 = ttk.Button(Lframe3, text='全選択', padding=5, command=check_all_5G_checkboxes) 197btn3.grid(row=5,column=0,pady=5) 198 199btn4 = ttk.Button(Lframe3, text='全解除', padding=5, command=clear_all_5G_checkboxes) 200btn4.grid(row=5,column=1,pady=5) 201 202btn5 = ttk.Button(text='測定開始', padding=5, command=check_box) 203btn5.grid(row=5,column=0,pady=5) 204 205btn6 = ttk.Button(text='キャンセル', padding=5) 206btn6.grid(row=5,column=1,pady=5) 207 208selected_frame.set(-1) 209change_selected_frame() 210 211root.mainloop() 212
画像2の通りに、リスト内の名前を合わせたいのですが、
エラーが表示されてしまいます。
selenium.common.exceptions.NoSuchElementException: Message: Cannot locate option with value: CH56/80
value: CH56/80 が原因かと思いますが、要素の通り 56/80 とvalueを設定するには
どのような記述を行えば宜しいでしょうか。
素人の拙い説明でもうしわけございまえん。
ご存知の方がいれば、ご教授いただけると幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。