#python #selenium #google-maps
#python #селен #google-карты
Вопрос:
Я хочу получить доступ к картам Google с помощью python, но сначала вам нужно нажать кнопку «Принять файлы cookie», и я не знаю почему, но я продолжаю получать эту ошибку:
Файл «file», строка 12, в WebDriverWait(драйвер, 10).пока (EC.element_to_be_clickable((By.XPATH, ‘//*[@id=»introAgreeButton»]’))).щелкните () Файл «C:UsersgasspAppDataLocalPackagesPythonSoftwareFoundation .Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagesseleniumwebdriversupportwait.py» , строка 80, в, пока
не вызовет исключение TimeoutException(message, screen, stacktrace) selenium.common.exceptions.Исключение TimeoutException: сообщение:
Вот мой код:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('PATH')
url = 'https://www.google.com/maps/'
driver.get(url)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="introAgreeButton"]'))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="searchboxinput"]'))).send_keys('gostilne')
driver.submit()
Ответ №1:
Согласно https://selenium-python.readthedocs.io/api.html :
исключение selenium.common.exceptions.Исключение TimeoutException(msg = None, screen = None, stacktrace = None) Основы: selenium.common.exceptions.Исключение WebDriverException возникает, когда команда не завершается за достаточное время.
Следовательно, вам нужно либо увеличить время, WebDriverWait(driver, 10)
либо проверить, выполняется ли условие EC.element_to_be_clickable
вообще.
Кроме того, попробуйте следующую реализацию:
element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="introAgreeButton"]')))
element.click()
Это исправило несколько проблем с моей стороны с аналогичной структурой кода.
Комментарии:
1. Я попытался увеличить время до 10, и оно по-прежнему выдает мне ту же ошибку. Есть еще идеи? Или ошибка может заключаться в том, что это окно приема файлов cookie является всплывающим окном?
2. @gasper_vaupot Элемент, на который вы ссылаетесь, скрыт? … это интерактивно? С информацией, которую вы нам предоставляете, трудно найти какое-либо решение вашей проблемы. Как уже упоминалось, согласно официальной документации Selenium
selenium.common.exceptions.TimeoutException
(ошибка, которую вы получаете), относится к следующей проблеме:a command does not complete in enough time
.3. Я не понимаю, как работает система времени. Если я увеличу число, время ожидания также увеличится, верно? Это означает, что если я изменю число на 30 вместо 10, оно должно подождать немного дольше, правильно?
4. @gasper_vaupot Взгляните на явные ожидания ( selenium-python.readthedocs.io/waits.html ): Оператор
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="introAgreeButton"]')))
ожидает максимум 10 секунд для элемента, который вы указали через XPath. Если элемент не найден, присваивается aTimeoutException
(тот, который вы получаете)! Таким образом, элемент либо недоступен, либо отсутствует (возможно, неправильный XPath?).5. Есть ли способ, чтобы я мог отправить изображение того, что я хочу щелкнуть? Чтобы вы точно знали, что я имею в виду
Ответ №2:
Когда я попытался получить доступ к сайту, я не нашел локатор xpath //*[@id="introAgreeButton"]
в chrome dev tool. Не уверен, к какому элементу он относится.
Однако, когда я прокомментировал эту строку и добавил событие щелчка на кнопке поиска, я смог получить результаты.
Также нет submit()
метода, доступного для экземпляра драйвера.
Ниже была моя пробная версия с использованием предоставленного вами кода —
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="searchboxinput"]'))).send_keys('gostilne')
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//button[@id='searchbox-searchbutton']"))).click()
Вывод :-
Комментарии:
1. Проблема, с которой я сталкиваюсь, до этого. Когда я запускаю свой код, он открывает новую вкладку Google Maps, но прежде чем я смогу что-либо сделать, поскольку я не зарегистрирован, я должен нажать кнопку «Принять файлы cookie», и в этом моя проблема
2. Я только что опубликовал изображение того, что я хочу щелкнуть здесь
3. Опубликуйте это в самом вашем вопросе, эта часть этой темы предназначена только для ответов
4. @gasper_vaupot Я не получаю это всплывающее окно с моей стороны
Ответ №3:
Проблема заключалась в том, что она не менялась между основным фреймом и фреймом принятия cookie. Вот код soulution:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('C:\Users\gassp\OneDrive\Namizje\Python.projects\chromedriver.exe')
url = 'https://www.google.com/maps/'
driver.get(url)
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, '//*[@id="consent-bump"]/div/div[1]/iframe')))
agree = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="introAgreeButton"]/span/span')))
agree.click()
#back to the main page
driver.switch_to_default_content()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="searchboxinput"]'))).send_keys('gostilne')
driver.submit()