2
votes

I have a code for an exercise at the university. I have installed all the package, but I don't know where the problem is. It's going to be a small scraper, just testing it out...

import requests # http requests
from lxml import html # html code --> xml tree
from selenium import webdriver # Selenium
driver = webdriver.Chrome(executable_path=r'C:\python27\chromedriver.exe')
from selenium.webdriver.common.keys import Keys # keyboard inputs
import time # functions using time

# In[89]:


browser = webdriver.Chrome() # Use Google Chrome Browser


# In[90]:


url = "http://www.hm.com/de/" # place URL here

#request website code
browser.get(url)


# In[91]:


# find body element
body_element = browser.find_element_by_tag_name("body")

# scroll up and down
body_element.send_keys(Keys.PAGE_DOWN)
time.sleep(0.5)
body_element.send_keys(Keys.PAGE_DOWN)
time.sleep(0.5)
body_element.send_keys(Keys.PAGE_UP)
time.sleep(0.5)
body_element.send_keys(Keys.PAGE_UP)


# In[92]:


#select search bar
search_field = browser.find_element_by_id("search-input")

# In[93]:


search_field.send_keys("Weihnachten") # insert search term


# In[94]:


#click searching button
browser.find_element_by_id("make-search-icon").click() # insert ID here

time.sleep(10)
# In[95]:


#click order button
browser.find_element_by_xpath("//*[@id=\"filter-controls-container\"]/div[3]/div/div/ul/li[4]/a/span").click()

And the error message says:

Traceback (most recent call last):
browser.find_element_by_xpath("//*[@id=\"filter-controls-container\"]/div[3]/div/div/ul/li[4]/a/span").click() File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click self._execute(Command.CLICK_ELEMENT) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 501, in _execute return self._parent.execute(command, params) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 308, in execute self.error_handler.check_response(response) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.ElementNotVisibleException: Message: element not visible (Session info: chrome=62.0.3202.94) (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.15063 x86_64)

I think the error tries to tell me that the element is not visible? How can I fix it? I tried it by adding time.sleep(10).

1
the error occures at the last line - Magnus Vivadeepa
Was my answer helpful? If yes -- please check a tick near my answer. Thanks. - Ratmir Asanov

1 Answers

0
votes
  1. Before the last click -- you should open the drop-down menu:

    browser.find_element_by_css_selector(".dropdown-menu.sort-options-dropdown").click()
    
  2. Then click on the last option in the drop-down (what are you trying to do in your last action):

    ui.WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='filter-controls-container']/div[3]/div/div/ul/li[4]/a/span"))).click()