Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何转发到另一个子页面_Python_Selenium_Forwarding - Fatal编程技术网

Python 如何转发到另一个子页面

Python 如何转发到另一个子页面,python,selenium,forwarding,Python,Selenium,Forwarding,今天,我用Python开始了我在Selenium中的第一个项目。 我将要写一个程序,它将自动在计算机上购买物品 网站。我将在未来的更新中扩展这个机器人的功能,但现在我需要做的第一件事是 程序现在应该做什么: 程序必须登录到站点 程序必须转发到子网站-这就是问题所在。我正在从网站注销,下一步当然不起作用 程序必须选择大小,然后单击“添加到购物车” 如果我不使用转发,而是单击站点的下一部分,则该程序工作正常。这意味着,如果我想从主页转发到产品页面,它将不起作用-我会注销。例如,当我单击home->s

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

程序现在应该做什么:

  • 程序必须登录到站点
  • 程序必须转发到子网站-这就是问题所在。我正在从网站注销,下一步当然不起作用
  • 程序必须选择大小,然后单击“添加到购物车”
  • 如果我不使用转发,而是单击站点的下一部分,则该程序工作正常。这意味着,如果我想从主页转发到产品页面,它将不起作用-我会注销。例如,当我单击home->shoes->name of shoe时,一切正常

    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时,身份验证过程似乎尚未完成

    正如在评论中所讨论的,为了测试这一理论,添加了一个
    睡眠
    ,以等待身份验证完成,这似乎是可行的

    与其使用
    睡眠
    ,不如等待某个元素出现在登录页上。我将给出一般示例的步骤:

  • 以下是您需要的
    import
    语句:
  • 登录后识别登录页上的某些元素。。。比如欢迎短信,或者其他不在登录页面上的内容。对于本例,假设您标识的元素有一个
    id=“Welcome”
    ,当然您的元素会有所不同

  • 使用以下代码等待该元素:

  • 此代码将等待该元素出现最多5秒,但一旦找到它就会返回。将秒数更改为等待登录所需的最长时间

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

    browser.get(stronaKup)
    

    有些东西需要检查。1.页面是否实际使用
    键在行后提交(尝试登录)。输入
    ?2.您是否在登录过程完成之前转发?(也就是说,在转发之前,你是否真的看到了成功登录后所期望的页面?)。如果你拿出
    浏览器。添加cookie(cookie)
    行,它能工作吗?(万一这会弄乱你得到的登录令牌…这里有longshot故障排除。)此外,在测试期间隐式设置
    是一种不好的做法,因为它几乎从未正确使用或更改回正确的位置,并且可能会导致一些令人毛骨悚然的错误,特别是在测试并行运行的情况下。但我不认为这会导致你的问题。@Freester 1先生。如果我删除了其余的代码,它就会删除。对于其余的代码,有时它会将我重定向到te ProcProduct页面,但有时它会显示一个日志页面。为了缩小问题范围,如果使用
    时间
    库->
    导入时间
    。。。并在转发到子页面之前添加此行->
    time.sleep(10)
    ?请注意,这不是一个很好的解决方案,只是看看您是否需要等待身份验证完成。这一次。sleep(2)-2对我帮助很大
    WebDriverWait(browser,5).until(
             EC.presence_of_element_located((By.ID, "Welcome")))
    
    browser.get(stronaKup)