I know that I should find “select” element so I can choose from drop-down list, But here google trends don’t provide “select” element and I want to choose any value from data and time list and When I try to do this I got this error ‘Message: Select only works on elements, not on ‘…. I found a solution but It was written by ‘requests’ module and I want to use selenium
from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import Select import time driver = webdriver.Chrome(executable_path="C:\Drivers\chromedriver.exe") driver.get("https://trends.google.com/trends") key1 = driver.find_element_by_xpath('//*[@id="sidenav-menu-btn"]/div') key1.click() time.sleep(1) key2 = driver.find_element_by_xpath('//*[@id="sidenav-list-group-trends"]/md-item[2]/md-item-content/a/i') key2.click() time.sleep(2) x = driver.find_element_by_xpath('//*[@id="select_12"]') x.click() drp = Select(x) drp.select_by_index(2)
Advertisement
Answer
Just grab them by the id
directly, instead of using select
drp = driver.find_element_by_id("select_option_22") # equates to 'Past 5 years' drp.click()
That opened up the Past 5 years (using that unique id
) when clicked
drp = driver.find_element_by_id("select_option_20") # equates to 'Past 30 days'
Would be the Past 30 days menu option, and so on….
Or, you can go for the text directly…
drp = driver.find_element_by_xpath("//div[normalize-space(text())='Past 7 days']") drp.click()
Note the normalize-space
, this is used to strip the white space which this element text value has. It won’t work without it.