Python - Selenium, проходящий через массив

1

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

 from selenium import webdriver
from selenium.webdriver.common.keys import Keys


driver = webdriver.Chrome("C:/Users/Daniel/Desktop/chromedriver.exe")
driver.implicitly_wait(30)
driver.maximize_window()




hasla = ["ispot","myapple"]

for slogan in hasla:
    driver.get("http://www.google.com")
    search_field = driver.find_element_by_id("lst-ib")

    search_field.clear()
    search_field.send_keys("apple")
    search_field.submit()
    name = driver.find_element_by_link_text(slogan)
    name.click()
    driver.quit()
    driver.implicitly_wait(10)

Когда я запускаю эту программу с консоли в окнах. Программа открывает браузер, ищет яблочный щелчок в браузере ispot и clsoe, но не открывает новый браузер и не делает то же самое для следующей строки в массиве. Любое решение?

В консоли у меня есть это: screen

  • 1
    Какой у вас вопрос?
  • 0
    Когда я запускаю эту программу из консоли в Windows, программа открывает браузер, ищет щелчок яблока в ispot и закрывает браузер, но не открывает новый браузер и не делает то же самое для следующей строки в массиве. Любое решение?
Показать ещё 2 комментария
Теги:
selenium
automation

1 ответ

2

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

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome("C:/Users/Daniel/Desktop/chromedriver.exe")
driver.implicitly_wait(30)
driver.maximize_window()

hasla = ["ispot","myapple"]

for slogan in hasla:
    driver.get("http://www.google.com")
    search_field = driver.find_element_by_id("lst-ib")

    search_field.clear()
    search_field.send_keys("apple")
    search_field.submit()
    name = driver.find_element_by_link_text(slogan)
    name.click()

    # Save the current tab id
    old_handle = driver.current_window_handle

    # Execute JavaScript to open a new tab and save its id
    driver.execute_script("window.open('');")
    new_handle = driver.window_handles[-1]

    # Switch to the old tab and close it
    driver.switch_to.window(old_handle)
    driver.close()

    # Switch focus to the new tab
    driver.switch_to.window(new_handle)

Если вы закрываете вкладку, вы не сможете увидеть результаты. Вы можете оставить его открытым и просто перейти на новую вкладку. В этом случае просто удалите driver.close().

В качестве альтернативы, если вы действительно хотите полностью закрыть браузер каждый раз и снова открыть его, вам просто нужно включить первые три строки в ваш цикл.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

hasla = ["ispot","myapple"]

for slogan in hasla:
    driver = webdriver.Chrome("C:/Users/Daniel/Desktop/chromedriver.exe")
    driver.implicitly_wait(30)
    driver.maximize_window()

    driver.get("http://www.google.com")
    search_field = driver.find_element_by_id("lst-ib")

    search_field.clear()
    search_field.send_keys("apple")
    search_field.submit()
    name = driver.find_element_by_link_text(slogan)
    name.click()
    driver.quit()

Чтобы ответить на ваш второй вопрос:

Во-первых, импортируйте NoSuchElementException:

from selenium.common.exceptions import NoSuchElementException

Затем замените try/except:

    try:
        name = driver.find_element_by_link_text(slogan)
        name.click()
    except NoSuchElementException:
        print('No such element')
    driver.quit()

Он все равно собирается закрыть браузер и перейти к следующей итерации, если элемент найден или нет.

  • 0
    Хорошо, спасибо, я понимаю это, но у меня есть проблема, потому что у меня есть ошибка, такая как «unindent не соответствует ни одному внешнему уровню отступа», и я не вижу, где у меня есть точный код, и проблема находится в «кроме NoSuchElementException:« Я помещаю также вкладку перед »драйвером .quit () ', но все равно не работает.
  • 0
    Если вы знаете, в какой строке находится ошибка, поместите курсор в конец предыдущей строки, нажимайте «Удалить», пока они не станут одной строкой, а затем нажмите клавишу «Ввод». Большинство IDE автоматически сделает отступ для вас. Если вы используете вкладки и пробелы непоследовательно, вы можете получить ошибку. Вот официальная документация: Отступы и вот полезная статья: Структурирование с отступами . Надеюсь это поможет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню