【问题标题】:Run a function inside a loop only once python and selenium [duplicate]仅在 python 和 selenium 一次循环内运行函数 [重复]
【发布时间】:2021-07-22 14:04:06
【问题描述】:

有人可以告诉我在这个循环中只运行一次 login() 吗? 第一次它会打开https://mywebsite.com/1234 并要求登录,login() 会这样做,然后它会去下载 .xlsx 文件。 然后它会转到https://mywebsite.com/4567 并且 login() 会尝试再次完成它的工作,但没有必要。所以 il 会设置一个错误为,找不到用户名字段。

有什么方法可以让登录只运行第一次?

请帮忙!

web_link='https://mywebsite.com/'
    tt_nr=TT_usrinput.get(0.1, END)
    wait = WebDriverWait(self,10)



    t=tt_nr.split('\n')

    for i in t:

        if i != "":
            fin=web_link+i
            self.maximize_window()
            self.delete_all_cookies()
            self.get(fin)
            
            login()
            

            WebDriverWait(self, 30).until(EC.element_to_be_clickable((By.ID, 'tab_related_items')))  # click Related Items
            self.find_element_by_id('tab_related_items').click()

            WebDriverWait(self, 5).until(
                EC.element_to_be_clickable((By.XPATH, '//a[@target="_blank" and contains(@href, ".xlsx")]')))
            elemsxlsx = self.find_element_by_xpath('//a[@target="_blank" and contains(@href, ".xlsx")]')
            elemsxlsx.click()

【问题讨论】:

  • 在循环外将一些变量设置为 False。在登录之前,测试该标志。如果为 False,请登录,然后将其设置为 True
  • 这很好用!谢谢

标签: python python-3.x selenium-webdriver


【解决方案1】:

正如安迪奈特所说,只需在循环外添加一个标志变量并在循环中检查它。

web_link='https://mywebsite.com/'
    tt_nr=TT_usrinput.get(0.1, END)
    wait = WebDriverWait(self,10)

do_login = True


    t=tt_nr.split('\n')

    for i in t:

        if i != "":
            fin=web_link+i
            self.maximize_window()
            self.delete_all_cookies()
            self.get(fin)
            
            if do_login:
               login()
               do_login = False
            

            WebDriverWait(self, 30).until(EC.element_to_be_clickable((By.ID, 'tab_related_items')))  # click Related Items
            self.find_element_by_id('tab_related_items').click()

            WebDriverWait(self, 5).until(
                EC.element_to_be_clickable((By.XPATH, '//a[@target="_blank" and contains(@href, ".xlsx")]')))
            elemsxlsx = self.find_element_by_xpath('//a[@target="_blank" and contains(@href, ".xlsx")]')
            elemsxlsx.click()

【讨论】:

  • 效果很好。谢谢!
猜你喜欢
  • 2023-01-30
  • 2018-10-28
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多