from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.chrome.options import Options
import time
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
options = Options()
# Set any options you need for Chrome
# options.add_argument('--headless') # Example for headless mode
# Using ChromeDriverManager to handle the Chrome driver
options = webdriver.ChromeOptions()
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
# Open the website
driver.get("https://online.singaporepools.com/en/sports")
# Wait for the page to load
time.sleep(6)
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.NAME, "upcomingFootball_filterBetType")))
# Locate the dropdown menu
dropdown = Select(driver.find_element(By.NAME, "upcomingFootball_filterBetType"))
# dropdown.click()
# Select the "1/2 Goal" option
dropdown.select_by_value("WH")
# Rest of your code
对于上述内容,我得到了例外:
Traceback (most recent call last):
File "D:\C_Drive\Dropbox\Important\Python_Code\self_util\football\4_football_login.py", line 34, in <module>
dropdown.select_by_value("WH")
File "D:\C_Drive\Hardlink\Users\TTHCMM\Envs\generic\lib\site-packages\selenium\webdriver\support\select.py", line 79, in select_by_value
self._set_selected(opt)
File "D:\C_Drive\Hardlink\Users\TTHCMM\Envs\generic\lib\site-packages\selenium\webdriver\support\select.py", line 214, in _set_selected
option.click()
File "D:\C_Drive\Hardlink\Users\TTHCMM\Envs\generic\lib\site-packages\selenium\webdriver\remote\webelement.py", line 94, in click
self._execute(Command.CLICK_ELEMENT)
File "D:\C_Drive\Hardlink\Users\TTHCMM\Envs\generic\lib\site-packages\selenium\webdriver\remote\webelement.py", line 395, in _execute
return self._parent.execute(command, params)
File "D:\C_Drive\Hardlink\Users\TTHCMM\Envs\generic\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 348, in execute
self.error_handler.check_response(response)
File "D:\C_Drive\Hardlink\Users\TTHCMM\Envs\generic\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: Element is not currently visible and may not be manipulated
(Session info: chrome=120.0.6099.130)
Stacktrace:
GetHandleVerifier [0x00796EE3+174339]
(No symbol) [0x006C0A51]
(No symbol) [0x003D6FF6]
(No symbol) [0x003DAEAC]
(No symbol) [0x003DC585]
(No symbol) [0x003DC622]
(No symbol) [0x0040C529]
(No symbol) [0x00402D63]
(No symbol) [0x0042700C]
(No symbol) [0x004025B0]
(No symbol) [0x00427414]
(No symbol) [0x0043A104]
(No symbol) [0x00426DA6]
(No symbol) [0x00401034]
(No symbol) [0x00401F8D]
GetHandleVerifier [0x00834B1C+820540]
sqlite3_dbdata_init [0x008F53EE+653550]
sqlite3_dbdata_init [0x008F4E09+652041]
sqlite3_dbdata_init [0x008E97CC+605388]
sqlite3_dbdata_init [0x008F5D9B+656027]
(No symbol) [0x006CFE6C]
(No symbol) [0x006C83B8]
(No symbol) [0x006C84DD]
(No symbol) [0x006B5818]
BaseThreadInitThunk [0x7674FCC9+25]
RtlGetAppContainerNamedObjectPath [0x77E17C6E+286]
RtlGetAppContainerNamedObjectPath [0x77E17C3E+238]
Process finished with exit code 1
怎么处理呢?
您
ElementNotInteractableException
之所以得到这样的结果,是因为在加载过程中您的资源会生成几个不可见的容器,其下拉列表的名称为 nameupcomingFootball_filterBetType
。因此,当您获取第一个元素时,它实际上是一个没有大小或位置的背景,并且会引发异常。
但是,呈现选项卡的指示器是具有选择器的容器
.tab-pane.active
。您应该等待它的可见性并获取内部下拉元素。