Как заставить мои клики работать на сайте https://www.costcobusinessdelivery.com с помощью Selenium через Python - PullRequest
1 голос
/ 26 сентября 2019

Когда я запускаю этот код в Selenium, он просто постоянно загружает веб-страницу.Может ли кто-нибудь заставить этот код работать и привести меня в форму входа?

from selenium import webdriver;
from selenium.webdriver.support.ui import Select;
from selenium.webdriver.common.keys import Keys;
from selenium.webdriver.common.by import By;
from selenium.webdriver.chrome.options import Options;
from selenium.webdriver.support.ui import WebDriverWait;
from selenium.webdriver.support import expected_conditions as EC;
import time;



browser = webdriver.Chrome()
browser.get('https://www.costcobusinessdelivery.com')

WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a#header_sign_in"))).click()

Примерно через 5 минут после того, как веб-страница не отвечает, я получаю эту ошибку:

TimeoutException                          Traceback (most recent call last)
<ipython-input-6-47279e187da7> in <module>
     11 
     12 browser = webdriver.Chrome()
---> 13 browser.get('https://www.costcobusinessdelivery.com')
     14 
     15 WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a#header_sign_in"))).click()

C:\ProgramData\Anaconda\lib\site-packages\selenium\webdriver\remote\webdriver.py in get(self, url)
    331         Loads a web page in the current browser session.
    332         """
--> 333         self.execute(Command.GET, {'url': url})
    334 
    335     @property

C:\ProgramData\Anaconda\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
    319         response = self.command_executor.execute(driver_command, params)
    320         if response:
--> 321             self.error_handler.check_response(response)
    322             response['value'] = self._unwrap_value(
    323                 response.get('value', None))

C:\ProgramData\Anaconda\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
    240                 alert_text = value['alert'].get('text')
    241             raise exception_class(message, screen, stacktrace, alert_text)
--> 242         raise exception_class(message, screen, stacktrace)
    243 
    244     def _value_or_default(self, obj, key, default):

TimeoutException: Message: timeout
  (Session info: chrome=77.0.3865.75)

1 Ответ

0 голосов
/ 27 сентября 2019

Кому click() по ссылке с текстом Вход / Регистрация на веб-сайте https://www.costcobusinessdelivery.com/ Вы должны вызвать WebDriverWait для element_to_be_clickable(), и выможно использовать любую из следующих стратегий локатора :

  • Использование PARTIAL_LINK_TEXT:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Sign In / Register"))).click()
    
  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a#header_sign_in"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@id='header_sign_in']"))).click()
    
  • Примечание : необходимо добавитьследующие импорты:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Снимок браузера:

costco_login

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