Как получить Selenium для входа на сайт Costco.com - PullRequest
0 голосов
/ 20 сентября 2019

Изображение экрана, на котором он остается навсегда:

Picture of the screen it stays on forever

У меня возникли проблемы при получении Selenium для входа на Costco.com.Он в основном зависает на экране входа и не переходит к следующему экрану.

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;
import time;

browser = webdriver.Chrome()
browser.get('https://www.costcobusinessdelivery.com/LogonForm?URL=%2f')

email = browser.find_element_by_css_selector('#logonId')
email.click()
email.send_keys('my_email')

password = browser.find_element_by_css_selector('#logonPassword_id')
password.click()
password.send_keys('my_password')

zipcode = browser.find_element_by_css_selector('#deliveryZipCode')
zipcode.click()
zipcode.send_keys('my_zipcode')


login = browser.find_element_by_css_selector('#sign_in_button')
login.click()

После нескольких минут сидения Selenium он выскакивает.Я пытался использовать beautifulsoup4 для входа и передачи данных обратно в Selenium, но я не уверен, что это работает.Поэтому сначала я должен перейти на страницу, которая мне нужна в Selenium, а затем проанализировать данные с помощью BS4.

TimeoutException                          Traceback (most recent call last)
<ipython-input-80-ddf2d5259794> in <module>
      1 login = browser.find_element_by_css_selector('#sign_in_button')
----> 2 login.click()

C:\ProgramData\Anaconda\lib\site-packages\selenium\webdriver\remote\webelement.py in click(self)
     78     def click(self):
     79         """Clicks the element."""
---> 80         self._execute(Command.CLICK_ELEMENT)
     81 
     82     def submit(self):

C:\ProgramData\Anaconda\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params)
    631             params = {}
    632         params['id'] = self._id
--> 633         return self._parent.execute(command, params)
    634 
    635     def find_element(self, by=By.ID, value=None):

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)

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Если идентификатор доступен, используйте его и попробуйте пример ниже.

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

usernameStr = 'putYourUsernameHere'
passwordStr = 'putYourPasswordHere'
zipStr ='putZipCode'

browser = webdriver.Chrome()
browser.get(('https://www.costcobusinessdelivery.com/LogonForm?URL=%2f'))



username = browser.find_element_by_id('logonId')
username.send_keys(usernameStr)

password= browser.find_element_by_id('logonPassword_id')
password.send_keys(passwordStr)

zip= browser.find_element_by_id('logonPassword_id')
zip.send_keys(zipStr)



signInButton = browser.find_element_by_id('sign_in_button')
signInButton.click()
0 голосов
/ 20 сентября 2019

Чтобы войти на Costco.com через URL https://www.costcobusinessdelivery.com/LogonForm?URL=%2f, вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любую из следующих Стратегий локатора :

  • css_selector:

    driver.get("https://www.costcobusinessdelivery.com/LogonForm?URL=%2f")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#logonId"))).send_keys("est3rz@stackoverflow.com")
    driver.find_element_by_css_selector("input#logonPassword_id").send_keys("my_password")
    driver.find_element_by_css_selector("input#deliveryZipCode").send_keys("54321")
    driver.find_element_by_css_selector("input#sign_in_button").click()
    
  • xpath:

    driver.get("https://www.costcobusinessdelivery.com/LogonForm?URL=%2f")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='logonId']"))).send_keys("est3rz@stackoverflow.com")
    driver.find_element_by_xpath("//input[@id='logonPassword_id']").send_keys("my_password")
    driver.find_element_by_xpath("//input[@id='deliveryZipCode']").send_keys("54321")
    driver.find_element_by_xpath("//input[@id='sign_in_button']").click()
    
  • Снимок браузера:

costco

...