Элемент в настоящее время не виден и поэтому не может взаимодействовать с Selenium Dropdown Box Python

Мне нужно пройти через все страницы моей веб-страницы. В левом верхнем углу на всех этих страницах есть раскрывающийся список со всеми доступными городами. Я хочу посетить каждую страницу, выбрав каждую позицию в этом раскрывающемся списке. В раскрывающемся списке есть полоса прокрутки, и когда я хочу выбрать опцию, которая ниже нее, она дает мне сообщение об исключении:

Message: Element is not currently visible and so may not be interacted with Stacktrace: at fxdriver.preconditions.visible (file:///tmp/tmpHWLMyH/extensions/fxdriver@googlecode.com/components/command-processor.js:9981) at DelayedCommand.prototype.checkPreconditions_ (file:///tmp/tmpHWLMyH/extensions/fxdriver@googlecode.com/components/command-processor.js:12517) at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpHWLMyH/extensions/fxdriver@googlecode.com/components/command-processor.js:12534) at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpHWLMyH/extensions/fxdriver@googlecode.com/components/command-processor.js:12539) at DelayedCommand.prototype.execute/< (file:///tmp/tmpHWLMyH/extensions/fxdriver@googlecode.com/components/command-processor.js:12481) 

Вот код:

 #!/bin/env/python # -*- coding: utf-8 -*- import time from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select def get_browser(): return webdriver.Firefox() main_page_url = "http://example.com/" basic_url = 'http://example.com/ogloszenia-kobiet.html' def get_city_list(url) : AGE_ACCEPT_BUTTON_XPATH = ".//*[@id='columns']/div/div[2]/section/div/div/div/div/div/div[2]/div[2]/a[2]" COMBOBOX_XPATH = ".//*[@id='select_city']/li/form/div/button" COMBOBOX_OPTION_XPATH = ".//*[@id='select_city']/li/form/div/div/ul/li[%s]/a/span[1]" CHOOSE_BUTTON_XPATH = ".//*[@id='select_city']/li/form/button" pages = [] try: browser = get_browser() wait = WebDriverWait(browser, 100) browser.get(main_page_url) time.sleep(2) button_age_accept = browser.find_element_by_xpath(AGE_ACCEPT_BUTTON_XPATH) button_age_accept.click() time.sleep(10) browser.get(url) i = 2 while(True) : try : button_combobox = browser.find_element_by_xpath(COMBOBOX_XPATH) button_combobox.click() time.sleep(5) element_xpath = COMBOBOX_OPTION_XPATH % i option_in_combobox = browser.find_element_by_xpath(element_xpath) # wait.until(EC.invisibility_of_element_located((By.XPATH, element_xpath))) # option_in_combobox = WebDriverWait(browser, 10).until(lambda browser : browser.find_element_by_xpath(element_xpath)) option_in_combobox.click() time.sleep(5) button_choose = browser.find_element_by_xpath(CHOOSE_BUTTON_XPATH) button_choose.click() time.sleep(5) pages.append(browser.current_url) i += 1 except Exception, e: print e break browser.close() return pages except Exception, e: info = 'Generic exception\n' print e return [] get_city_list(basic_url) 

Я также пробовал с помощью полосы прокрутки, попытался переместить ее, но все равно, никакого эффекта. Я могу прокручивать только те страницы, которые находятся в верхней части этого раскрывающегося списка:

 #!/bin/env/python # -*- coding: utf-8 -*- import time from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select def get_browser(): return webdriver.Chrome() main_page_url = "http://example.com/" basic_url = 'http://example.com/ogloszenia-kobiet.html' def get_city_list(url) : AGE_ACCEPT_BUTTON_XPATH = ".//*[@id='columns']/div/div[2]/section/div/div/div/div/div/div[2]/div[2]/a[2]" COMBOBOX_XPATH = ".//*[@id='select_city']/li/form/div/button" COMBOBOX_OPTION_XPATH = ".//*[@id='select_city']/li/form/div/div/ul/li[%s]/a/span[1]" CHOOSE_BUTTON_XPATH = ".//*[@id='select_city']/li/form/button" pages = [] try: browser = get_browser() wait = WebDriverWait(browser, 100) browser.get(main_page_url) time.sleep(2) button_age_accept = browser.find_element_by_xpath(AGE_ACCEPT_BUTTON_XPATH) button_age_accept.click() time.sleep(10) browser.get(url) i = 2 while(True) : try : button_combobox = browser.find_element_by_xpath(COMBOBOX_XPATH) button_combobox.click() time.sleep(5) element_xpath = COMBOBOX_OPTION_XPATH % i option_in_combobox = browser.find_element_by_xpath(element_xpath) actionChains = ActionChains(browser) scrollbar = browser.find_element_by_xpath("/html/body/section/section[2]/div/div[2]/section/div/div/div/div[1]/ul/li/form/div/div/ul") actionChains.click_and_hold(scrollbar).perform() actionChains.move_by_offset(0,10+i).perform() actionChains.release() browser.execute_script("arguments[0].scrollIntoView();", option_in_combobox) option_in_combobox.click() browser.execute_script("window.scrollTo(0, 0);") button_choose = browser.find_element_by_xpath(CHOOSE_BUTTON_XPATH) button_choose.click() time.sleep(5) pages.append(browser.current_url) i += 1 except Exception, e: print e break browser.close() return pages except Exception, e: info = 'Generic exception\n' print e return [] pages = get_city_list(basic_url) for p in pages : with open('links.txt', 'a') as the_file: the_file.write(p) the_file.write('\n') 

————————————————– ————————————————– ——————————– ОБНОВЛЕНИЕ: —————- ————————————————– ————————————————– —————-

Пока я использую Kubuntu 14.04 . У меня Python 2.7.11 и Selenium 2.49.2 . Мой текущий код:

 #!/bin/env/python # -*- coding: utf-8 -*- import time from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select # def get_browser(): # options = webdriver.ChromeOptions() # options.add_argument("--start-maximized") # return webdriver.Chrome(chrome_options=options) def get_browser(): return webdriver.Firefox() main_page_url = "http://example.com/" basic_url = 'http://example.com/ogloszenia-kobiet.html' def get_city_list(url) : AGE_ACCEPT_BUTTON_XPATH = ".//*[@id='columns']/div/div[2]/section/div/div/div/div/div/div[2]/div[2]/a[2]" COMBOBOX_XPATH = ".//*[@id='select_city']/li/form/div/button" COMBOBOX_OPTION_XPATH = ".//*[@id='select_city']/li/form/div/div/ul/li[%s]/a/span[1]" CHOOSE_BUTTON_XPATH = ".//*[@id='select_city']/li/form/button" pages = [] try: browser = get_browser() wait = WebDriverWait(browser, 100) browser.get(main_page_url) time.sleep(2) button_age_accept = browser.find_element_by_xpath(AGE_ACCEPT_BUTTON_XPATH) button_age_accept.click() time.sleep(10) browser.get(url) i = 2 while(True) : try : button_combobox = browser.find_element_by_xpath(COMBOBOX_XPATH) button_combobox.click() time.sleep(5) element_xpath = COMBOBOX_OPTION_XPATH % i option_in_combobox = browser.find_element_by_xpath(element_xpath) option_in_combobox.click() button_choose = browser.find_element_by_xpath(CHOOSE_BUTTON_XPATH) button_choose.click() time.sleep(5) pages.append(browser.current_url) i += 1 except Exception, e: print e break browser.close() return pages except Exception, e: info = 'Generic exception\n' print e return [] pages = get_city_list(basic_url) for p in pages : with open('links.txt', 'a') as the_file: the_file.write(p) the_file.write('\n') 

Для Firefox код выходит из элемента «Gdańsk» с сообщением: string indices must be integers , поэтому это означает, что он не находит каждый элемент в моем поле со списком.

Для Chrome и Windows XP он выходит на «Bielsko-Biała», поэтому снова это означает, что он не находит в моем элементе все элементы. …

Как я могу решить эту проблему?

4 Solutions collect form web for “Элемент в настоящее время не виден и поэтому не может взаимодействовать с Selenium Dropdown Box Python”

Перейдите к элементу и нажмите:

 from selenium.webdriver.common.action_chains import ActionChains actions = ActionChains(browser) actions.move_to_element(option_in_combobox).click().perform() 

или, перейдите в его представление :

 browser.execute_script("arguments[0].scrollIntoView();", option_in_combobox) 

или, щелкните элемент через javascript :

 browser.execute_script("arguments[0].click();", option_in_combobox) 

Для Firefox код выходит из элемента «Gdańsk» с сообщением: строковые индексы должны быть целыми числами, поэтому это означает, что он не находит каждый элемент в моем поле со списком.

В селене 2.49 существует существующая проблема, которая может вызвать этот TypeError . Вам нужно будет понизить до 2,48:

 pip install selenium==2.48 
  • Python & Selenium Click и "TypeError: строковые индексы должны быть целыми числами"

Как уже упоминалось, вы должны сначала перейти к элементу опции, прежде чем actions.move_to_element(option_in_combobox).click().perform() на него: actions.move_to_element(option_in_combobox).click().perform() . Теперь элемент «button_choose» не отображается, потому что браузер прокручивается вниз. Чтобы исправить это, вам нужно прокрутить вверх, а затем нажать кнопку:

 browser.execute_script("window.scrollTo(0, 0);") # scroll to top button_choose = browser.find_element_by_xpath(CHOOSE_BUTTON_XPATH) button_choose.click() 

попробуйте это перед тем, как выбрать «Not Now invisible Element», и после нажатия на раскрывающемся меню:

 browser.execute_script("document.getElementsByClassName('dropdown-menu inner selectpicker')[0].setAttribute('style', '');") 

Я пробовал в java и работаю очень хорошо. Я прошу, чтобы посмотреть на цикл в основном, так как здесь я могу выбирать варианты по одному. Я просто использовал Thread.sleep, так как знаю, что мы также можем использовать ожидания. Чтобы сделать похожий на вопрос, который я просто добавил в StringBuffer, я знаю, что мы можем добавить к любому коллекционеру в java. Я не соблюдаю точно как приемный возраст и т. Д., Так как я сказал, что сосредоточился на этом выпадающем списке.

  public class Dog { private WebDriver driver; private String baseUrl; private StringBuffer verificationErrors = new StringBuffer(); @BeforeClass() public void setUp() throws Exception { // driver = new FirefoxDriver(); System.setProperty("webdriver.chrome.driver", "E:\\selenium_setups\\chromedriver_win32\\chromedriver.exe"); driver=new ChromeDriver(); driver.manage().window().maximize(); baseUrl = "http://example.com/"; driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); } @Test public void testStackoverflowIssue() throws Exception { driver.get(baseUrl); driver.findElement(By.cssSelector(".btn.btn-success")).click(); driver.get("http://example.com/ogloszenia-kobiet.html"); List<WebElement> options=driver.findElements(By.xpath(".//*[@id='select_city']/li/form/div/div/ul/li")); for(int i=1; i<=options.size(); i++){ driver.findElement(By.xpath("(//button[@type='button'])[4]")).click(); driver.findElement(By.xpath("//ul[@id='select_city']/li/form/div/div/ul/li["+i+"]")).click(); driver.findElement(By.cssSelector("button.btn.btn-success")).click(); Thread.sleep(5000); verificationErrors.append(driver.getCurrentUrl()); System.out.println(driver.getCurrentUrl() +" >>> iteration " +i); driver.navigate().to("http://example.com/ogloszenia-kobiet.html"); Thread.sleep(5000); } } 

}

Надеюсь, это поможет вам в python выбрать выпадающие значения.

вывод введите описание изображения здесь

Благодарю вас, Мурали

  • Ошибка Selenium Python при попытке запустить firefox
  • Испытания селена после первого теста
  • Как написать несколько условий if-statement в структуре робота
  • эквивалент selenium.wait_for_condition в привязках Python для WebDriver
  • Selenium - идентифицировать веб-элемент с помощью src или alt
  • Selenium webdriver: Как найти ВСЕ атрибуты элемента?
  • не удалось вызвать firefox из селена в python на машине AWS
  • Selenium WebDriver не может загружать профиль
  • селен не выполняет итерацию по элементам
  • множественные тестовые примеры python selenium
  • Как возобновить сеанс браузера или использовать существующее окно браузера с Selenium-Python?
  • Python - лучший язык программирования в мире.