Issue
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
For the following above I got exception:
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
How to handle that?
Solution
You're getting ElementNotInteractableException
because during load your resource generates several invisible containers with dropdown with name upcomingFootball_filterBetType
.
So when you're getting first element, it is actually a backdrop that doesn't have size or location and exception is thrown.
However, indicator of rendered tab is container that has selector .tab-pane.active
.
You should just wait for it's visibility and get inner dropdown element.
wait = WebDriverWait(driver, 15)
dropdown_container = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".tab-pane.active [name=upcomingFootball_filterBetType]")))
dropdown = Select(dropdown_container)
dropdown.select_by_value("WH")
Answered By - Yaroslavm
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.