如何转发到另一个子页面

How to forward to another subpage

今天我用 Python 开始了我在 Selenium 中的第一个项目。 我要编写一个程序,自动在 网站。我打算在未来的更新中扩展这个机器人的功能,但现在我需要做的第一件事。

程序现在应该做什么:

  1. 程序必须登录网站
  2. 程序必须转发到子站点 - 这是问题所在。我正在从站点注销,下一步当然不起作用。
  3. 程序必须选择大小,然后单击 "add to cart."

如果我不使用转发但单击网站的下一部分,程序运行良好。这意味着如果我想从主页转发到产品页面,那是行不通的——我会被注销。例如,当我点击主页 -> 鞋子 -> 鞋子名称时,一切正常。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import time

browser = webdriver.Chrome(executable_path=r'C:\Users\damia\Desktop\chromedriver.exe')

stronaLog="https://www.zalando-lounge.pl/#/login"
stronaKup="https://www.zalando-lounge.pl/campaigns/ZZO0TCY/categories/5999626/articles/AD115O085-A12"

#getting to the site
browser.get(stronaLog)

#logging
email = browser.find_element_by_id('form-email').send_keys('myemail')
password = browser.find_element_by_id('form-password').send_keys('mypass' + Keys.ENTER)
time.sleep(1)

#save cookies
cookie={'name': 'MojCiasteczek', 'value':'666666'}
browser.add_cookie(cookie)

#forwading to next site and buying product
browser.get(stronaKup)
browser.find_element_by_xpath("//*[contains(text(), '41 1/3')]").click()
browser.find_element_by_css_selector('#addToCartButton > div.articleButton___add-to-cart___1Nngf.core___flipper___3yDf4').click()

当您尝试导航到需要用户登录的 url 时,身份验证过程似乎尚未完成。

正如评论中所讨论的,为了测试这个理论,添加了一个 sleep 来等待身份验证完成并且看起来有效。

比使用 sleep 更稳健的方法是等待某些元素出现在着陆页上。我将给出一个一般示例的步骤:

  1. 这是您需要的 import 语句:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
  1. 在登录后识别登陆页面上的一些元素...比如欢迎文本,或者任何实际上不在登录页面上的元素。对于这个例子,假设您识别的元素有一个 id="Welcome",当然您的会有所不同。

  2. 使用此代码等待该元素:

WebDriverWait(browser,5).until(
         EC.presence_of_element_located((By.ID, "Welcome")))

此代码最多等待 5 秒以等待该元素出现,但一旦找到它就会 return。将等待的秒数更改为您希望登录花费的最长时间。

之后,您应该能够以经过身份验证的用户身份导航到您的其他 url:

browser.get(stronaKup)