Сайт успешно загружен с помощью хроматографа Selenium, но не может с ним взаимодействовать после - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь взаимодействовать с веб-сайтом Lowes (https://www.lowes.com/) с помощью Selenium и ChromeDriver. После загрузки домашней страницы я хочу изменить местоположение, но не могу взаимодействовать с веб-сайтом. Нажав накнопка изменения местоположения, как вручную, так и через Selenium, приводит к загрузке страницы навсегда и, в конечном счете, к возникновению исключения TimeOutException. Любые идеи о том, почему это может иметь место, и что можно сделать, чтобы решить проблему?

Я имеюзагрузил веб-сайт и нормально взаимодействовал с ним, когда я загружал его вручную с помощью Google Chrome, Mozilla Firefox и Internet Explorer, поэтому я не думаю, что это проблема только с веб-сайтом.

Я также использовал Seleniumи ChromeDriver для загрузки и взаимодействия с более чем 40 другими веб-сайтами без каких-либо проблем, поэтому я не верю, что это проблема с Selenium / ChromeDriver / Chrome и любыми проблемами несовместимости версий. Мой Chrome - версия 71.0.3578.98 и моя версия драйвера71.0.3578.137. Я запускаю свой сценарий (показанный ниже) в Windows NT6.1.761 SP1 x86_64 с Spyder на Python 3.6.

Код, который я запускаю, выглядит следующим образом:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time

def click_button(x_path)
    button = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, x_path)))
    button = driver.find_element_by_xpath(x_path)
    button.click()
    time.sleep(2)
    pass

#the issue persists with and without the commented lines
url = 'https://www.lowes.com/'
try:
    #options = webdriver.ChromeOptions()
    #options.add_argument("start-maximized")
    #options.add_argument("disable-infobars")
    #options.add_argument("--disable-extensions")
    driver = webdriver.Chrome('C://Temp//chromedriver.exe') #,options=options)
    #driver.implicitly_wait(30)
    driver.get(url)
except Exception as e:
    print(e)

#The following code hasn't worked, nor has manually interacting with the website at this point

sign_up_save_close = '//*[@id="emailSignUpDialog"]/div[2]/div/div/div/button
button_click(sign_up_save_close)

find_store_x_path = '//*[@id="currentStoreWrapper"]/div/div[2]/div[2]/a'
button_click(find_store_x_path)

Я подозреваю, что это может быть связано с уникальным взаимодействием веб-сайта сChromeDriver.

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

Я пытался запустить его в Firefox с помощью geockdriver, но я не смог заставить моего geckodriver работать.Тем не менее, я хочу сохранить этот вопрос о Chrome.

Есть идеи?

РЕДАКТИРОВАТЬ: Я добавлю код для обработки зарегистрироваться и сохранить, но всплывающее окно не проблема,Как я уже сказал, я пытался взаимодействовать с сайтом как вручную, так и с помощью кода.Нажатие на Find a Store заканчивается загрузкой сайта навсегда.Я также открыт для других решений доступа к страницам продуктов на этом веб-сайте в определенных местах.

1 Ответ

0 голосов
/ 12 апреля 2019
  • Вы определили функцию щелчка как click_button(), но вы называете ее как button_click().
  • Вы должны всегда использовать явное ожидание вместо сна.
  • Вынужно подождать, пока кнопка закрытия будет кликабельной, а после нажатия на кнопку закрытия, вам придется подождать, пока модал не будет скрыт, а главная страница будет кликабельной.
  • Я проверил это с помощью Java.Нажмите на страницу работ.Но нажатие на кнопку Find a store с помощью chromedriver показывает Access Denied.Таким образом, по-видимому, этот сайт имеет обнаружение и блокировку селена.
...