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