Python - Selenium, проходящий через массив - PullRequest
0 голосов
/ 20 сентября 2018

Я бы хотел сделать автоматический скрипт.Я определяю массив в запуске программы.Позже программа открывает браузер и ищет в 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)

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

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

1 Ответ

0 голосов
/ 20 сентября 2018

Вы выходите из браузера в цикле 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().

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

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

Затем замените попытку / исключение наthis:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...