我是Python自學新手,想自己寫一個自動化程式,但是在選擇選單時發生問題,找尋很多資料但是沒有得到解答,希望有大大可以幫助。
錯誤碼
Traceback (most recent call last):
File "", line 1, in
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\support\select.py", line 99, in select_by_index
for opt in self.options:
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\support\select.py", line 47, in options
return self._el.find_elements(By.TAG_NAME, 'option')
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 685, in find_elements
{"using": by, "value": value})['value']
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
return self._parent.execute(command, params)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: stale element not found
(Session info: chrome=87.0.4280.88)
Python
Selector_Element = Select(driver.find_element_by_tag_name("select"))
Selector_Element.select_by_index(2)
找了一下方法 因為選半天選不到
所以我改用 ActionChains
# 要載入 ActionChans 跟 Keys
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
# ...
# 設定要選取的 select
select = driver.find_element_by_xpath('//*[@id="contents"]/div/div/div[4]/div[2]/div[3]/div[2]/div[6]/div[2]/div/div/div/div/div/select')
# 設定向下按的 action
action_key_down = ActionChains(driver).move_to_element(select).key_down(Keys.DOWN).key_up(Keys.DOWN)
# 設定按 Enter 的 action
action_key_enter = ActionChains(driver).move_to_element(select).key_down(Keys.RETURN)
# 假設要選優惠券的話 執行 2 次向下
action_key_down.perform()
action_key_down.perform()
# 執行 Enter
action_key_enter.perform()
你可以看一下selenium的中文文檔
裡面用name定位的用法只有
driver.find_element_by_name('定位元素')
看你的網頁HTML也沒有叫做'select'的元素
補充: 定位選單不是用select喔! 應該要用id(或用name都可以)
所以要改成
driver.find_element_by_id('6736hgrob7u')
你說你想定位選單,建議你用相對位置的定位法
driver.find_element_by_xpath("/html/body/option[2]")
上面那句要依照你要爬的tag改,先用我打的試試看
感謝大大的回應,因為他的id每次都會更新,所以我用name去定位,位址應該有定位到,但問題出在定位Select後,要選擇選項時發生錯誤,我有看HTML裡面沒有frame,我有用測試網頁可以順利執行,所以不知道此網頁在select上有甚麼問題。
Selector_Element =Select(driver.find_element_by_name('typeId'))
Selector_Element.select_by_index(2)
有網址可以讓我測試嗎
這個是Line official Account裡面的選單,需要登入帳號才能進去操作。Line official Account(https://account.line.biz/login?redirectUri=https%3A%2F%2Fmanager.line.biz%2Faccount%2F%40437eexcg%2Fautoresponse%2Fsimple-qa)
你的 line official account 的畫面我看不到
是圖文選單那個頁面嗎?